【问题标题】:ranlib/ar in Mac OS gives me "has no symbols" warningMac OS 中的 ranlib/ar 给了我“没有符号”的警告
【发布时间】:2014-06-29 11:31:58
【问题描述】:

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

但不能说服 Mac OS 上的 ranlib/ar 禁止这些文件的“没有符号”警告。

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

谢谢,

KJ

【问题讨论】:

  • 在这种情况下,您可以使用grep -v 'no symbols' 作为一种实用的方式来保持沉默(因为您知道自己在做什么)。
  • 我也希望有一个解决方案。 'grep -v' 也是 not 可接受的解决方法。它假设我正在运行构建。如果其他人克隆了 repo,他们在构建时不需要 grep 警告。

标签: c macos unix linker


【解决方案1】:

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

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

(包含在 Xcode 10.1 中)。不幸的是,ar 还没有这个选项。但正如man 页面所述

运行ranlib完全等同于执行‘ar -s’

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多