Mac OS中的ranlib / ar给了我"没有符号"警告

时间:2014-05-12 07:32:21

标签: c macos unix linker

我使用一个特定的库,它有几种编译方式(特定于平台和特定于目标的代码),因此,有时在归档中有完全空的.c文件;代码只是#ifdef' d。这是完全理解的,而不是一个错误:我想这样。在Linux上,这确实不是问题。如果这是一个问题,链接器会捕获它。

然而,Mac OS上的ranlib / ar无法令人信服地压制"没有符号"警告这些文件。

现在,我是一名工程师,我希望完全无警告地运行我的编译过程。这是将要评估的关键代码;如果我有警告,人们会看着我好笑。是否有一些我忽略的事情?一些命令行选项?

谢谢,

KJ

2 个答案:

答案 0 :(得分:1)

我想到的两种可能性是:(1)总是在库中放置一些符号,即使它是一个零长度的对象。 (2)在Makefile环境中为runlib / ar提供包装过滤警告。其他用户/自动构建不需要显式使用grep -v,它可以在您提供和替换的命令中,例如:

AR = $(PROJECT_HOME)/bin/project-ar
RANLIB = $(PROJECT_HOME)/bin/project-ranlib

答案 1 :(得分:1)

最后ranlib的较新版本提供了一个选项-no_warning_for_no_symbols,该选项在man页中称为

  

不要警告没有符号的文件。

(包含在Xcode 10.1中)。不幸的是,ar还没有此选项。但是,如man页所指出的那样

  

运行ranlib完全等同于执行“ ar -s”

因此,您可能可以将ar的许多(如果不是全部)调用替换为ranlib