필요한 .so 파일의 절대 경로가 /home/dev/casablanca/Release/build.release/Binaries/libcpprest.so
인 내 홈 디렉토리에 casablanca C++ 나머지 라이브러리를 컴파일하고 빌드했습니다. 내가하고 싶었던 것은이었다 내가 쉽게 다음과 같은 명령으로 연결 할 수 있도록 lib 디렉토리 검색 ../
을 기본 /usr/lib/..
경로에 파일을 .SO 단순히 cp
과 과거 :.so 파일을 복사하여 붙여 넣기
g++ index.cpp -I/home/dev/casablanca/Release/include -lcpprest -std=c++11
잘 컴파일,하지만 난 실행할 때 심지어 LD_LIBRARY_PATH에 libcpprest.so의 기본 경로를 추가 한 후
couldn't load shared library: libcpprest.so
: ./a.out 나는 일반적인 런타임 오류가 발생했습니다. 내가 바이너리가 처음에 생성 된 디렉토리 링크 된 경우
그러나 모든 것이 잘 작동 : 내가 추측하고있어// ./a.out runs just fine
g++ index.cpp -I/home/dev/casablanca/Release/include \
-L/home/dev/casablanca/Release/build.release/Binaries -lcpprest -std=c++11
을 그 나는 단순히 내가 원하는 .so를 개체를 이동할 수없는 이유 그것을 추가하는 것은 어떻게 든 컴파일러가 어떻게 든 그것에 대한 참조를 유지합니다. 어떻게이 바이너리를 다른 경로에 설치할 수 있습니까?
'a.out의 libcpprest.so.2.2입니다 '-L'은 런타임에 검색 할 경로를 설정하지 않았기 때문에 실행이 잘되지 않아야합니다. 전체 스토리를 말할 수는 없을 것입니다. 실행 파일과 라이브러리에'ldd'를 사용하고 환경을 확인하십시오 모든 경우에 동일합니다. 또한이'usr/lib/.. '는 무엇입니까? 루트로 실행하고'/ usr'에 모든 것을 덤프하고 있습니까? –
.so가 연결되는 많은 .o 파일이있을 수 있다고 생각합니다. .so 디렉토리가 변경되면 해당 링크가 손상 될 수 있습니다. 내 추측이야. –
".so 디렉토리가 변경되면 해당 링크가 손상 될 수 있습니다." 링커에게 그렇게하도록 지시 한 경우에만, 그렇지 않은 경우 링커에게 지시하십시오. 실행 파일과 라이브러리에'ldd'를 사용 했습니까? 출력물에 의심스러운 점이 있습니까? –