这与通常对重复符号错误的混淆有所不同......: - )
我正在Xcode项目中处理一些遗留的Mac代码,这些代码具有相同的全局“跟踪”,在几个不同的源文件中定义 - 例如:
等。很明显,原作者认为他们具有特定于文件的范围,但忽略了将这些行中的任何一行作为“静态”前缀。这很好,很容易修复。
但我有点震惊的是链接器没有标记这些!在我看来,Xcode的链接器(我假设gnu ld)只发出链接到代码段的函数的重复符号警告或错误 - 但不是链接到数据段的全局变量。相反,它会默默地混淆它们,这会导致错误。
那么......我如何说服Xcode为重复的全局变量发出链接错误?或者以其他方式获取此信息,这可能是我构建的常规部分?
答案 0 :(得分:2)
好吧,我想到我已经回答了我自己的问题......: - )
我之前发过:
因此,如果您将Xcode与LLVM GCC一起使用 4.2,进入构建设置对话框,找到“LLVM GCC 4.2 - 代码 生成“部分,并检查”否 Common Blocks“复选框。这样就可以了 编译器的“-fno-common”选项, 并更改目标文件生成 所以ld会窒息并发出一个 如果你有两个全局变量错误 具有相同的不同源文件 名。
不幸的是,这似乎并没有解决所有情况。如果所有全局变量具有相同的类型,它似乎工作正常。
但问题中的示例直接来自代码,其中名为“trace”的变量被定义为具有两种不同类型的两个不同文件中的全局变量。当我检查该复选框时,构建系统仍然没有捕获到它。