在 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

mainserver_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 &lt;rpc/types.h&gt; 并见下图)

将修改后的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

在 Visual Studio 2017 社区版上编译 Qt 5.8 时出现错误 C3615

linux上编译log4cpp1.0包时出现错误。