如何说服Xcode发出重复的符号链接器错误?

时间:2011-03-23 20:47:38

标签: xcode macos linker ld

这与通常对重复符号错误的混淆有所不同......: - )

我正在Xcode项目中处理一些遗留的Mac代码,这些代码具有相同的全局“跟踪”,在几个不同的源文件中定义 - 例如:

  • File1.c:SInt32 trace;
  • File2.c:布尔跟踪;

等。很明显,原作者认为他们具有特定于文件的范围,但忽略了将这些行中的任何一行作为“静态”前缀。这很好,很容易修复。

但我有点震惊的是链接器没有标记这些!在我看来,Xcode的链接器(我假设gnu ld)只发出链接到代码段的函数的重复符号警告或错误 - 但不是链接到数据段的全局变量。相反,它会默默地混淆它们,这会导致错误。

那么......我如何说服Xcode为重复的全局变量发出链接错误?或者以其他方式获取此信息,这可能是我构建的常规部分?

1 个答案:

答案 0 :(得分:2)

好吧,我想到我已经回答了我自己的问题......: - )

我之前发过:

  

因此,如果您将Xcode与LLVM GCC一起使用   4.2,进入构建设置对话框,找到“LLVM GCC 4.2 - 代码   生成“部分,并检查”否   Common Blocks“复选框。这样就可以了   编译器的“-fno-common”选项,   并更改目标文件生成   所以ld会窒息并发出一个   如果你有两个全局变量错误   具有相同的不同源文件   名。

不幸的是,这似乎并没有解决所有情况。如果所有全局变量具有相同的类型,它似乎工作正常。

但问题中的示例直接来自代码,其中名为“trace”的变量被定义为具有两种不同类型的两个不同文件中的全局变量。当我检查该复选框时,构建系统仍然没有捕获到它。