2009-10-29 4 views
4

일부 타사 라이브러리가 있고 응용 프로그램과 링크해야하는 (/ usr/ssd/include 및/usr/ssd/lib 위치에 복사했습니다). 테스트 애플리케이션을 작성하여 링크 할 수 있는지 확인했습니다. 그러나, 내 애플 리케이션을 실행하려고하면 다음과 같은 메시지가 나타납니다. 내가 경고 나 에러가 발생하지 않는 한라이브러리 연결 -rpath LD_LIBRARY_PATH

gcc -g -Wall -I/usr/ssd/include -L/usr/ssd/lib -lssdn test_app.c -o app 

모든 것이 확인을 컴파일 :이 같은 컴파일하고 명령 행에서

./app: error while loading shared libraries: libssdn.so: cannot open shared object file: No such file or directory 

. 그러나 시도하고 응용 프로그램을 실행할 때 오류가 발생합니다. 에서

USR/SSD 라이브러리가 나는 해결책을 찾고 있어요

libssdn.so라고 나는 -rpath, -Wl 및 LD_LIBRARY_PATH에 대해 뭔가를 읽을 수 있지만 한/lib 디렉토리하지 않도록 그들이 무엇을 어떻게 내가 컴파일 할 때 그것들을 포함시킨다.

답변

2

내 개인적인 취향은 (-rpath은 어떻게 할 것인지입니다) 실행 파일로 공유 객체의 위치를 ​​굽는 것이 아니다 나는 우분투 9.04 리눅스를 사용하고

, 어떤 조언을

감사합니다.

대신 런타임시 LD_LIBRARY_PATH에/usr/ssd/lib를 추가해야합니다. bash 나 bash 같은 쉘을 실행한다고 가정하면 다음을 수행하십시오.

export LD_LIBRARY_PATH=/usr/ssd/lib:${LD_LIBRARY_PATH} 

그리고 일단 그렇게하면 실행 파일을 실행할 수 있습니다.

+1

안녕하세요. 그러나, 만약 내가 다른 리눅스 컴퓨터에서 내 응용 프로그램을 실행했다. 같은 문제가 있습니까? 죄송하지만, -rpath와 LD_LIBRARY_PATH를 사용하는 것과는 다른 점을 이해할 수 없습니다. 감사. – ant2009

+2

-rpath는 본질적으로 LD_LIBRARY_PATH를 프로그램 자체로 굽혀 LD_LIBRARY_PATH에 추가 할 필요가 없습니다. 모든 머신이 같은 위치에 라이브러리를 가지고 있다면, -rpath는 괜찮습니다. 그러나 라이브러리가 다른 경로에있는 시스템에서 프로그램을 실행하려는 경우 -rpath를 사용할 수 없습니다. –

+0

@Samuel - -rpath에는 $ LIB 및 $ ORIGIN이라는 특수 코드가 있습니다. 예를 들어 somedirectory/bin/binaryprog가 있다면 -rpath $ ORIGIN /../ lib와 링크 할 수 있으며 somedirectory가 컴파일/링크 시간에 알려지지 않은 경우에도 somedirectory/lib/yourlibrary에서 라이브러리를 선택합니다. 툴 체인을 설정하는 방법에 따라 $$ ORIGIN 또는 \ $$ ORIGIN을 지정해야하지만 바이너리의 RPATH 헤더에 하나의 $ 만 있어야합니다. –

3

시험을 $ LD_LIBRARY_PATH를/usr/SSD/lib 디렉토리를 추가하면 도움이된다면 : 그 문제가 해결되면

 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/ssd/lib 

가,은/usr/SSD/추가하여 영구적 : 쉘에서

lib를 /etc/ld.so.conf 또는 실행하여

ldconfig -n /usr/ssd/lib
관련 문제