在 macOS 上编译 XDR 时出现问题(RPC types.h 问题)
Posted
技术标签:
【中文标题】在 macOS 上编译 XDR 时出现问题(RPC types.h 问题)【英文标题】:Problems while compiling XDR on macOS (RPC types.h issue) 【发布时间】:2017-07-09 17:58:56 【问题描述】:我正在尝试编译一些关于 UNIX scokets 程序的源代码,在 Linux 上我没有问题,但在 macOS 上我遇到了类型定义问题。我不知道我可以在这里放多少细节,但我会尝试。
要编译的源代码有:
errlib.c
errlib.h
server_test.c
sockwrap.c
sockwrap.h
main
在server_test.c
中的位置。
要编译我使用:
gcc -Wall -DTRACE -o server_test server_test.c errlib.c sockwrap.c
在 Linux 上运行它没有问题,但在 macOS 上我收到超过 20 个错误,所有这些都是关于(可能)缺少bool_t
的定义。我想在位于 macOS 内部库中的 /usr/include/rpc/*
文件中有些东西不起作用。
所以我寻找<sys/types.h>
是否包含在/usr/include/rpc/xdr.h
中,它似乎没有丢失。
gcc
输出的一些第一行是:
In file included from server_test.c:16:
/usr/include/rpc/xdr.h:126:3: error: type name requires a specifier or qualifier
bool_t (*x_getlong)(struct __rpc_xdr *, int *);
^
/usr/include/rpc/xdr.h:126:10: error: function cannot return function type 'int (struct __rpc_xdr *, int *)'
bool_t (*x_getlong)(struct __rpc_xdr *, int *);
^
/usr/include/rpc/xdr.h:128:3: error: type name requires a specifier or qualifier
bool_t (*x_putlong)(struct __rpc_xdr *, const int *);
^
/usr/include/rpc/xdr.h:128:10: error: function cannot return function type 'int (struct __rpc_xdr *, const int *)'
bool_t (*x_putlong)(struct __rpc_xdr *, const int *);
^
/usr/include/rpc/xdr.h:128:3: error: duplicate member 'bool_t'
bool_t (*x_putlong)(struct __rpc_xdr *, const int *);
^
/usr/include/rpc/xdr.h:126:3: note: previous declaration is here
bool_t (*x_getlong)(struct __rpc_xdr *, int *);
^
/usr/include/rpc/xdr.h:136:3: error: type name requires a specifier or qualifier
bool_t (*x_getbytes)(struct __rpc_xdr *, char *, unsigned int);
...
和许多其他非常相似的行。
想要深入了解的朋友,可以here获取资源。
可能是什么问题?
【问题讨论】:
【参考方案1】:不好的答案
只需在server_test.c
源中包含<rpc/types.h>
即可解决问题,如下所示:
#include <rpc/types.h>
更好的
以上解决方案仅对server_test.c
实现有效。
如果您想“全局”修复此问题,您可以按照以下步骤操作:
禁用 SIP(如何?here)
获取您的 macOS 的xdr.h
(从这里/usr/include/rpc/xdr.h
)
在别处复制两次:一份用于备份并修改另一份,只需添加所需的包含(#include <rpc/types.h>
并见下图)
将修改后的xdr.h
覆盖到/usr/include/rpc/
中的原始/usr/include/rpc/
重新启用 SIP
我是这样做的:
【讨论】:
以上是关于在 macOS 上编译 XDR 时出现问题(RPC types.h 问题)的主要内容,如果未能解决你的问题,请参考以下文章
在ubuntu shell上编译cpp程序时出现问题[重复]
在 raspbian 上编译 pybind11 测试用例时出现致命错误
在 AIX 5.3 上编译 Python 2.6.4 时出现问题
在 Visual Studio 2017 社区版上编译时出现错误 Qt 5.8