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