【问题标题】:Building C with automake under OS X and Linux在 OS X 和 Linux 下使用 automake 构建 C
【发布时间】:2016-07-28 09:03:22
【问题描述】:

目前我正在为基于澳大利亚的 Serval 项目(GitHub) 用 C 语言编写延迟容忍网络的 RPC 系统。

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

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

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

第一个问题如下: In file included from /usr/include/x86_64-linux-gnu/sys/types.h:29:0, from /usr/local/include/curl/curlbuild.h:131, from /usr/local/include/curl/curl.h:34, from rpc.h:1, from 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 分支。 在这一点上,回购有点恶心,根本不干净。一切正常后我会清理。

感谢您的帮助:)

【问题讨论】:

    标签: c linux macos github autotools


    【解决方案1】:

    这是因为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,并包含具有完整相对路径的文件,应该没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 2011-07-12
      • 2015-09-09
      • 2011-03-16
      相关资源
      最近更新 更多