2012-07-10 5 views
0

두 개의 종속 dylib에 정의 된 기호를 가져 오는 이진 파일을 연결 중이므로 ld에서 올바른 기호를 선택할 수 없습니다.연결시 잘못된 dylib에서 기호가 선택되었습니다.

기호는 _init_process이며 libSystem.dylib (암시 적으로 ld가 추가됨)와 libida.dylib (우리 라이브러리)에서 모두 정의됩니다. 나는 libida를 선택하는 ld을 원하지만 나는 그것을 작동하게 만들 수 없다. -lida -lSystem 앞에 오는, 그래서 내가 먼저 libida.dylib 선택하는 ld을 기대,

/usr/libexec/gcc/i686-apple-darwin10/4.2.1/ld -dynamic -dylib 
-dylib_compatibility_version 1.0 -dylib_current_version 1.0 -arch 
i386 -macosx_version_min 10.5 -macosx_version_min 10.5 
-single_module -weak_reference_mismatches non-weak -w -o 
../../bin/x86_mac_gcc/plugins/python.pmc -ldylib1.10.5.o 
-L../../bin/x86_mac_gcc/ 
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib/i686-apple-darwin10/4.2.1 
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib 
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1 
-L/usr/lib/gcc/i686-apple-darwin10/4.2.1 
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1 
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.. 
-v -lpthread ../../lib/x86_mac_gcc_32/libiconv.2.2.0.dylib 
obj/x86_mac_gcc_32/python.o32 obj/x86_mac_gcc_32/idaapi.o32 -lida 
-install_name python.pmc -lpython2.6 -ldl -why_load 
-search_paths_first -t -lstdc++ -lgcc_s.10.5 -lgcc -lSystem 

당신이 볼 수 있듯이,하지만 일이 아니에요 :

다음은 최종 링커 명령 행의

링커의
dlopen(/home/test/build/bin/x86_mac_gcc/plugins/python.pmc): dlopen(/home/test/build/bin/x86_mac_gcc/plugins/python.pmc, 2): Symbol not found: _init_process 
    Referenced from: /home/test/build/bin/x86_mac_gcc/plugins/python.pmc 
    Expected in: /usr/lib/libSystem.B.dylib 
in /home/test/build/bin/x86_mac_gcc/plugins/python.pmc 
/home/test/build/bin/x86_mac_gcc/plugins/python.pmc: can't load file 

디버그 출력 :

Library search paths: 
    ../../bin/x86_mac_gcc/ 
    /Developer/SDKs/MacOSX10.5.sdk/usr/lib/i686-apple-darwin10/4.2.1 
    /Developer/SDKs/MacOSX10.5.sdk/usr/lib 
    /usr/lib/gcc/i686-apple-darwin10/4.2.1 
    /usr/lib/gcc/i686-apple-darwin10/4.2.1 
    /Developer/SDKs/MacOSX10.5.sdk/usr/lib/i686-apple-darwin10/4.2.1 
    /Developer/SDKs/MacOSX10.5.sdk/usr/lib 
    /usr/lib 
    /usr/local/lib 
Framework search paths: 
    /Library/Frameworks/ 
    /System/Library/Frameworks/ 
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/dylib1.10.5.o 
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libpthread.dylib 
../../lib/x86_mac_gcc_32/libiconv.2.2.0.dylib 
obj/x86_mac_gcc_32/python.o32 
obj/x86_mac_gcc_32/idaapi.o32 
../../bin/x86_mac_gcc//libida.dylib 
/usr/lib/libpython2.6.dylib 
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libdl.dylib 
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/i686-apple-darwin10/4.2.1/libstdc++.dylib 
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libgcc_s.10.5.dylib 
/usr/lib/gcc/i686-apple-darwin10/4.2.1/libgcc.a 
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib 
/usr/lib/system/libmathCommon.A.dylib 

답변

0

를 해결했다. 범인은 -lpthread이었다 - 점 libpthread가 libSystem에 심볼릭 링크 :

$ ls -la /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libpthread.dylib 
lrwxr-xr-x 1 root wheel 15 Nov 9 2011 /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libpthread.dylib -> libSystem.dylib 

-lida 후를 이동 한 후, 모든 것이 기대 작품으로.