2012-06-27 2 views
0

올바르게 프로젝트를 연결하는 데 문제가 있습니다. 프로젝트는 CMAKE로 제작되었습니다. 링크가 잘된 것처럼 보이지만 런타임에 오류가 발생합니다.Dylib는 링크 타임에는 작동하지만 런타임에는 작동하지 않습니다.

$ /usr/bin/clang -Wl,-search_paths_first -Wl,-headerpad_max_install_names \ 
     CMakeFiles/project.dir/src/conf.c.o CMakeFiles/project.dir/src/tun-compat.c.o \ 
     CMakeFiles/project.dir/src/compress.c.o CMakeFiles/project.dir/src/mc.c.o \ 
     CMakeFiles/project.dir/src/hexdump.c.o CMakeFiles/project.dir/src/server.c.o \ 
     CMakeFiles/project.dir/sys/unix/log.c.o CMakeFiles/project.dir/sys/unix/imsg.c.o \ 
     CMakeFiles/project.dir/ sys/unix/imsg-buffer.c.o CMakeFiles/project.dir/sys/unix/toto.c.o \ 
     CMakeFiles/project.dir/sys/unix/toto.c.o CMakeFiles/project.dir/sys/unix/util.c.o \ 
     CMakeFiles/project.dir/sys/unix/conf.c.o CMakeFiles/project.dir/sys/unix/tntsocket.c.o \ 
     -o bin/project/opt/local/lib/libevent_openssl.dylib /opt/local/lib/libevent_core.dylib \ 
     /usr/lib/libz.dylib /opt/local/lib/libyajl.dylib /opt/local/lib/libtapcfg.dylib 

내가 오류 :

$ ./bin/project                                                
dyld: Library not loaded: build/libtapcfg.dylib                                        
    Referenced from: /Users/Antoine/project/./bin/project                                      
    Reason: image not found                                             
zsh: trace trap ./bin/project                                            

추가 정보를 정기적으로 :

$ dyldinfo -dylibs bin/projectattributes                                        
     dependent dylibs                                               
         /opt/local/lib/libevent_openssl-2.0.5.dylib                                   
         /opt/local/lib/libevent_core-2.0.5.dylib                                          
         /usr/lib/libz.1.dylib                                        
         /opt/local/lib/libyajl.2.dylib                                      
         build/libtapcfg.dylib                                        
         /usr/lib/libSystem.B.dylib                                       

그것은 보이는 여기

는 연결에 사용 된 명령입니다 나에게 흑 마술처럼. 링커는 기호를 찾을 수 있지만 링크 명령에서 처리되는 방식의 차이를 볼 수없는 경우에도 라이브러리의 경로를 변경하여 결국 ...

lib 위치는/opt/local/lib/libtapcfg.dylib

$ ls -lhF /opt/local/lib/libtapcfg.dylib                                          
-rwxr-xr-x 1 root admin 20K 14 jui 18:05 /opt/local/lib/libtapcfg.dylib*                                

문제는 아마도 내가 연결하는 lib에서 왔을까요?

+0

libtapcfg는 어디서 오는가? (즉, 어떤 포트) – Mark

+0

이것은 포트가 아니며 수동으로 설치 한 무료 프로젝트입니다. (http://code.google.com/p/tapcfg/) – Antzi

답변

1

문제점은 libtapcfg를 빌드하고 설치 한 방법과 관련이 있습니다.

로컬 디렉토리에서/opt/local/lib로 복사 한 것으로 보이므로 파일 시스템 경로가 라이브러리에 저장된 내용과 일치하지 않습니다.

lib를 로컬 경로에 두거나 라이브러리를 빌드 할 때 링커에게 말합니다.이 위치는 링커에서 하드 코딩 된/usr/local/lib로 복사되거나 복사됩니다. Apple developer's note on dynamic libraries

포트를 사용하여 macports를 사용하는 경우에만/opt/local에 넣어야합니다. 이 경우 많은 것을 할 필요가없는 로컬 포트 ​​파일을 만들고 macports 표준 작업은/opt/local/lib에서 작동하도록 올바른 정보를 라이브러리에 넣습니다.

+0

감사합니다! dylib를/usr/local/lib로 옮기는 것이 가장 좋은 해결책이었습니다. – Antzi