首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在macOS上编译XDR时出现的问题(RPC types.h问题)

在macOS上编译XDR时出现的问题(RPC types.h问题)
EN

Stack Overflow用户
提问于 2017-07-10 01:58:56
回答 1查看 573关注 0票数 1

我正在尝试编译一些关于UNIX scokets程序的源代码,在Linux上我没有问题,但在macOS上我遇到了类型定义问题。我不知道我能在这里放多少细节,但我会尝试。

需要编译的源码如下:

代码语言:javascript
运行
复制
errlib.c
errlib.h
server_test.c
sockwrap.c
sockwrap.h

server_test.cmain所在的位置。

为了编译,我使用:

代码语言:javascript
运行
复制
gcc -Wall -DTRACE -o server_test server_test.c errlib.c sockwrap.c

在Linux上运行这个没有问题,但在macOS上我得到了20多个错误,所有这些都是关于(也许)缺少bool_t的定义。我认为在macOS内部库中的/usr/include/rpc/*文件中有一些不起作用的东西。

因此,我查看了/usr/include/rpc/xdr.h中是否包含了<sys/types.h>,但它似乎没有丢失。

gcc输出的一些前几行是:

代码语言:javascript
运行
复制
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获得源代码。

可能的问题是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-07-10 02:24:17

糟糕的答案

只需在server_test.c源代码中包含<rpc/types.h>即可解决此问题,如下所示:

代码语言:javascript
运行
复制
#include <rpc/types.h>

更好的那个

这是上面的一个解决方案,仅对此server_test.c实现有效。

如果您希望“全局”修复此问题,可以执行以下步骤:

禁用SIP (how to?here)

  • get your macOS's xdr.h )(从这里开始,在别处复制两次:一个副本用于备份和修改,另一个副本只需添加所需的include (在/usr/include/rpc/

  • re-enable

中查看图片here)

  • get your
  • xdr.h #include <rpc/types.h>your
    • xdr.h in the original #include <rpc/types.h>

下面是我是如何做到的:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44999407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档