更新:链接错误
我才意识到,你可以通过设置LD_TRACE_ARCHIVES和LD_TRACE_DYLIBS环境变量,然后直接在命令行中运行链接器命令获得更多的信息。下面是我执行,然后它的输出(虽然我更换了一些很长的路径和名称与<short-text
>字符串):
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2
-arch i386
-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk
-L<path_to_project>/build/Debug-iphonesimulator
-L<path_to_static_libs>
-F<path_to_project>/build/Debug-iphonesimulator
-filelist <path_to_project>/build/<project_name>.build/Debug-iphonesimulator/<project_name>.build/Objects-normal/i386/<project_name>.LinkFileList
-mmacosx-version-min=10.6
--verbose
-lproject_lib
-Xlinker -objc_abi_version
-Xlinker 2
-framework Foundation -framework UIKit -framework OpenGLES -framework QuartzCore
-o <path_to_project>/build/Debug-iphonesimulator/<project_name>.app/<project_name>
Using built-in specs.
Target: i686-apple-darwin10
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5664)
/Developer/usr/bin/../libexec/gcc/i686-apple-darwin10/4.2.1/collect2
-dynamic -arch i386 -macosx_version_min 10.6
-syslibroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk
-weak_reference_mismatches non-weak
-o <path_to_project>/build/Debug-iphonesimulator/<project_name>.app/<project_name>
-lcrt1.10.6.o
-L<path_to_project>/build/Debug-iphonesimulator
-L<path_to_static_libs>
-L/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib
-L/Developer/usr/bin/../lib/gcc/i686-apple-darwin10/4.2.1
-L/Developer/usr/bin/../lib/gcc
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1
-L/Developer/usr/bin/../lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1
-L/Developer/usr/bin/../lib/gcc/i686-apple-darwin10/4.2.1/../../..
-L/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../..
-filelist <path_to_project>/build/<project_name>.build/Debug-iphonesimulator/<project_name>.build/Objects-normal/i386/<project_name>.LinkFileList
-lproject_lib
-objc_abi_version 2
-framework Foundation -framework UIKit -framework OpenGLES -framework QuartzCore
-lstdc++ -lSystem -lgcc -lSystem
-F<path_to_project>/build/Debug-iphonesimulator
[Logging for XBS] Used dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/Foundation.framework/Foundation
[Logging for XBS] Used dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/UIKit.framework/UIKit
[Logging for XBS] Used dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/OpenGLES.framework/OpenGLES
[Logging for XBS] Used dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/QuartzCore.framework/QuartzCore
[Logging for XBS] Used dynamic library: /Developer/usr/lib/gcc/i686-apple-darwin10/4.2.1/libstdc++.dylib
[Logging for XBS] Used dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/libSystem.dylib
[Logging for XBS] Used indirect dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/libobjc.A.dylib
[Logging for XBS] Used indirect dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
[Logging for XBS] Used indirect dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/system/libSystem.override.dylib
[Logging for XBS] Used indirect dynamic library: /usr/lib/libSystem.B.dylib
[Logging for XBS] Used indirect dynamic library: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/system/libmathCommon.A.dylib
[Logging for XBS] Used static archive: <path_to_static_libs>/libproject_lib.a
Undefined symbols:
".objc_class_name_NSBundle", referenced from:
[email protected][email protected][email protected] in libproject_lib.a(file1.o)
".objc_class_name_UIWindow", referenced from:
[email protected][email protected][email protected] in libproject_lib.a(file2.o)
".objc_class_name_UIView", referenced from:
.objc_class_name_file3 in libproject_lib.a(file3.o)
".objc_class_name_CAEAGLLayer", referenced from:
[email protected][email protected][email protected] in libproject_lib.a(file3.o)
".objc_class_name_EAGLContext", referenced from:
[email protected][email protected][email protected] in libproject_lib.a(file2.o)
[email protected][email protected][email protected] in libproject_lib.a(file3.o)
".objc_class_name_NSDictionary", referenced from:
[email protected][email protected][email protected] in libproject_lib.a(file3.o)
".objc_class_name_NSNumber", referenced from:
[email protected][email protected][email protected] in libproject_lib.a(file3.o)
".objc_class_name_UIScreen", referenced from:
[email protected][email protected][email protected] in libproject_lib.a(file2.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
所以,问题是:为什么没有被发现,即使collect2的.objc_class_name_xxx引用正在研究iPhoneSimulator的正确框架位置?这里的要点是,这一切都正常工作,当针对iPhone设备本身时,没有链接错误。
原始邮件:
我已经编译并在Xcode链接的精细标定设备本身(新iPad)时,而是一个应用程序,当我尝试目标模拟器我得到指示的错误,从我的框架符号没有找到m使用。
我已经看到了与此相关的一些旧的线程,但他们的建议不工作: 1)我没有复制的iPhoneOS SDK框架本地 2)我没有一个明确的框架搜索路径 3)但是,我确实有明确的库搜索路径,一个用于模拟器,一个用于设备。 4)我尝试制作明确的框架搜索路径,一个用于模拟器,一个用于设备,但也不起作用,尽管生成的gcc命令行具有正确的模拟器的-syslib和-F选项。
我一直坚持这一段时间了。有没有人有任何进一步的洞察可能会发生什么?我只是连接4个基础框架,Foundation,UIKit,QuartzCore和OpenGLES。
感谢,
-Eric
omfg我一直在一遍又一遍地问这个同样的问题。非常感谢你分享你的答案。 – cheshirekow 2012-04-16 01:51:15