일부 타사 라이브러리가 있고 응용 프로그램과 링크해야하는 (/ 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 디렉토리하지 않도록 그들이 무엇을 어떻게 내가 컴파일 할 때 그것들을 포함시킨다.
안녕하세요. 그러나, 만약 내가 다른 리눅스 컴퓨터에서 내 응용 프로그램을 실행했다. 같은 문제가 있습니까? 죄송하지만, -rpath와 LD_LIBRARY_PATH를 사용하는 것과는 다른 점을 이해할 수 없습니다. 감사. – ant2009
-rpath는 본질적으로 LD_LIBRARY_PATH를 프로그램 자체로 굽혀 LD_LIBRARY_PATH에 추가 할 필요가 없습니다. 모든 머신이 같은 위치에 라이브러리를 가지고 있다면, -rpath는 괜찮습니다. 그러나 라이브러리가 다른 경로에있는 시스템에서 프로그램을 실행하려는 경우 -rpath를 사용할 수 없습니다. –
@Samuel - -rpath에는 $ LIB 및 $ ORIGIN이라는 특수 코드가 있습니다. 예를 들어 somedirectory/bin/binaryprog가 있다면 -rpath $ ORIGIN /../ lib와 링크 할 수 있으며 somedirectory가 컴파일/링크 시간에 알려지지 않은 경우에도 somedirectory/lib/yourlibrary에서 라이브러리를 선택합니다. 툴 체인을 설정하는 방법에 따라 $$ ORIGIN 또는 \ $$ ORIGIN을 지정해야하지만 바이너리의 RPATH 헤더에 하나의 $ 만 있어야합니다. –