为什么我会遇到这个特定的 Mach-O 链接器问题?
Why am I getting this particular Mach-O linker problem?
我查看了关于 SO 的所有 Mach-0 链接器问题,但找不到任何似乎与我的问题相关的问题。我的应用程序在调试器中编译数周都没有问题,这似乎是突然发生的。问题似乎指向两个源文件(keypad.o 和 setoutput.o)。以前的 Mach-O 错误通常告诉我不能从“某个文件”.o 中引用某某某某,但在这种情况下没有这么简单的线索。错误如下所示:
ld "/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug/MacOS Cover.app/Contents/MacOS/MacOS Cover" normal x86_64
cd "/Users/Administrator/Desktop/MacOS Cover"
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -L/Users Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug -F/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug -filelist "/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Intermediates/MacOS Cover.build/Debug/MacOS Cover.build/Objects-normal/x86_64/MacOS Cover.LinkFileList" -mmacosx-version-min=10.6 -framework Cocoa -o "/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug/MacOS Cover.app/Contents/MacOS/MacOS Cover"
ld: duplicate symbol _required in /Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Intermediates/MacOS Cover.build/Debug/MacOS Cover.build/Objects-normal/x86_64/keypad.o and /Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Intermediates/MacOS Cover.build/Debug/MacOS Cover.build/Objects-normal/x86_64/setoutput.o for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Command /Developer/usr/bin/clang failed with exit code 1
我试过丢弃所有派生数据文件等(似乎 spring 一秒钟后又回来了)。如果有人能帮我解决这个问题,我将不胜感激。
这两个 object 文件每个都导出一个同名的符号(required
;下划线是编译器的产物)。根据您对这两者的确切打算,您可能需要:a) 重命名其中一个或两者;或 b) 使其中之一或两者具有内部链接,通常通过将它们标记为 static
.
您很有可能认为只有一个这样的符号,因为您在两个源文件都包含的 header 中声明了它。但是,您可能无意中 定义了 header 中的符号,而不仅仅是声明它。然后,它在包含它的每个源文件中定义。您必须使用 required
的 declaration/definition 显示您的源代码,以及它是如何被引入每个源文件的。
我查看了关于 SO 的所有 Mach-0 链接器问题,但找不到任何似乎与我的问题相关的问题。我的应用程序在调试器中编译数周都没有问题,这似乎是突然发生的。问题似乎指向两个源文件(keypad.o 和 setoutput.o)。以前的 Mach-O 错误通常告诉我不能从“某个文件”.o 中引用某某某某,但在这种情况下没有这么简单的线索。错误如下所示:
ld "/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug/MacOS Cover.app/Contents/MacOS/MacOS Cover" normal x86_64
cd "/Users/Administrator/Desktop/MacOS Cover"
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -L/Users Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug -F/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug -filelist "/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Intermediates/MacOS Cover.build/Debug/MacOS Cover.build/Objects-normal/x86_64/MacOS Cover.LinkFileList" -mmacosx-version-min=10.6 -framework Cocoa -o "/Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Products/Debug/MacOS Cover.app/Contents/MacOS/MacOS Cover"
ld: duplicate symbol _required in /Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Intermediates/MacOS Cover.build/Debug/MacOS Cover.build/Objects-normal/x86_64/keypad.o and /Users/Administrator/Library/Developer/Xcode/DerivedData/MacOS_Cover-aemdqkcjvuomtjfhkycsyowsgisn/Build/Intermediates/MacOS Cover.build/Debug/MacOS Cover.build/Objects-normal/x86_64/setoutput.o for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Command /Developer/usr/bin/clang failed with exit code 1
我试过丢弃所有派生数据文件等(似乎 spring 一秒钟后又回来了)。如果有人能帮我解决这个问题,我将不胜感激。
这两个 object 文件每个都导出一个同名的符号(required
;下划线是编译器的产物)。根据您对这两者的确切打算,您可能需要:a) 重命名其中一个或两者;或 b) 使其中之一或两者具有内部链接,通常通过将它们标记为 static
.
您很有可能认为只有一个这样的符号,因为您在两个源文件都包含的 header 中声明了它。但是,您可能无意中 定义了 header 中的符号,而不仅仅是声明它。然后,它在包含它的每个源文件中定义。您必须使用 required
的 declaration/definition 显示您的源代码,以及它是如何被引入每个源文件的。