2011-02-15 4 views
1

업데이트 : 난 그냥 당신이 LD_TRACE_ARCHIVES 및 LD_TRACE_DYLIBS 환경 변수를 설정 한 후 명령 줄에서 직접 링커 명령을 실행하여 더 많은 정보를 얻을 수 있다는 것을 깨달았링크 오류 iPhoneSimulator을 대상으로

.

/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 

그래서 질문은 : 다음 .objc_class_name_xxx 참조도 collect2 불구하고 발견되지 않는 이유는 여기에 (내가> 문자열 <short-text으로 매우 긴 경로와 이름을 대체하지만) 내가 실행 한 후 출력하고있는 무슨이다 iPhoneSimulator의 올바른 프레임 워크 위치를 조사하고 있습니까? 요점은이 모든 것이 올바르게 작동한다는 것입니다. iPhone 장치 자체를 타겟팅 할 때 링크 오류가 없습니다.

원본 메시지 :

I가 컴파일 엑스 코드에서 잘 연결하는 장치 자체 (아이 패드)를 대상으로 할 때,하지만 응용 프로그램 나는 오류가 표시 얻을 시뮬레이터를 대상으로 시도 할 때 내가 '프레임 워크의 상징 사용중인 m이 없습니다.

나는이 관련된 일부 오래된 스레드를 본 적이 있지만 자신의 제안이 작동하지 않습니다 1) 나는 그러나) 로컬 2) 내가 명시 적 프레임 워크 검색 경로 3이없는 iPhoneOS SDK 프레임 워크를 복사하지 않았다 , 나는 명시적인 라이브러리 검색 경로를 가지고 있는데, 하나는 시뮬레이터 용이고 다른 하나는 장치 용이다. 4) 명시 적 프레임 워크 검색 경로를 만들려고했는데 하나는 시뮬레이터 용이고 하나는 장치 용이지만 생성 된 gcc 명령 줄에는 시뮬레이터에 대한 올바른 -syslib 및 -F 옵션이 있지만 어느 것도 작동하지 않습니다.

나는 꽤 오랫동안 여기에 갇혀있었습니다. 어떤 일이 벌어지고 있는지에 대한 더 깊은 통찰력을 가진 사람 있습니까? 난 그냥 4 기본 프레임 워크, 재단, UIKit, QuartzCore, 그리고 OpenGLES에 대해 연결 해요.

감사합니다, -Eric

나는 마지막으로이 알아 낸

답변

5

: 나는 내가 필요로 알고하지 않았기 때문에

내 정적 라이브러리에서 외부 참조가 제대로 생성되지 않는 한

문제가 정적 lib 모듈을 빌드 할 때 -fobjc-abi-version = 2 명령 행 옵션을 사용하십시오.

주요 혼란은 장치를 타겟팅 할 때이 명령 줄 옵션이 필요하지 않지만 (이 경우 무해하다고 생각할지라도) 시뮬레이터를 타겟팅 할 때 필요합니다.

그래서 iOS 대상에 연결할 모듈에 대한 메이크 파일을 만드는 경우이 옵션을 포함시켜야합니다!

-eric

+0

omfg 나는이 동일한 질문을 반복해서 물어왔다. 답변을 공유해 주셔서 감사합니다. – cheshirekow

+0

나도, 건배! – Colen