c - 在 OS X 和 Linux 下使用 automake 构建 C

标签 c linux macos github autotools

目前我正在基于来自澳大利亚的Serval 项目为延迟容忍网络编写一个RPC 系统(GitHub)在 C 中。

主要是我在 macOS El Capitan 上开发,一切正常。但我的代码在 macOS 和 Linux 上运行有点重要。但是 Linux 制造了麻烦。

我选择 automake 作为我的构建系统,因为这是我至少有一点经验的唯一系统。我也尝试过 CMake,但收效甚微。

我现在的问题是在 macOS 上一切正常。但是在 Linux (Debian) 上没有编译。 autoreconf 生成一个没有错误的配置脚本,configure 生成一个没有错误的 Makefile。但是 make 会产生很多错误。如果我说很多,我的意思是很多(大约 75.000 行)。

第一个问题如下: 在包含的文件中 来自/usr/include/x86_64-linux-gnu/sys/types.h:29:0, 来自/usr/local/include/curl/curlbuild.h:131, 来自/usr/local/include/curl/curl.h:34, 来自 rpc.h:1, 来自 main.c:1: /usr/include/x86_64-linux-gnu/bits/types.h:30:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef’ typedef unsigned char __u_char;

我四处搜索,发现有人说这种类型的错误来自用户代码的某个地方,可能是缺少 ; 或类似的。但我仔细检查了一切。缺少 ; 也会在 macOS 上出现问题。

我的代码可以在我的 Github repo. 中找到请使用 dev 分支。 在这一点上,repo 有点恶心而且一点也不干净。当一切运行时,我会清理。

谢谢你的帮助:)

最佳答案

这是因为 serval/general/features.h。这是怎么回事:

curl/curl.h 包含 curlbuild.h,后者包含 sys/types.h

sys/types.h 包括 features.h(预计来自 glibc 的),其中包括 sys/cdefs.h,它定义了 __BEGIN_CDECL(什么都没有,因为这是 C,而不是 C++。)

sys/types.h 开始于(剪掉不需要的东西)

__BEGIN_CDECL

typedef unsigned char __u_char;

因为 __BEGIN_CDECL 没有定义,所以出错了。

避免在命令行中使用 -Iserval/general 并包含具有完整相对路径的文件,这样应该没问题。

关于c - 在 OS X 和 Linux 下使用 automake 构建 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38631709/

相关文章:

c - C 中的独立应用程序,一个好主意?

objective-c - OS X 在后台打开 URL 方案

c++ - 我们如何添加备用节点数据?

c - 多维数组的typedef?

c - 尝试从 printf 语句中的函数打印静态变量时出现奇怪的输出

macos - 在 OSX 上的 Emacs 中将 alt/option 键设置为 Meta

objective-c - 为什么带有属性的 createDirectory AtPath 不起作用

c - 如何使用结构体指针输入用户的值并显示结构体成员的值?

c++ - 用于内容检索 (GET) 和数据写入磁盘的多线程

c - pthread 似乎没有使用更新的全局数据值