2014-11-06 4 views
1

필요한 .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를 개체를 이동할 수없는 이유 그것을 추가하는 것은 어떻게 든 컴파일러가 어떻게 든 그것에 대한 참조를 유지합니다. 어떻게이 바이너리를 다른 경로에 설치할 수 있습니까?

+1

'a.out의 libcpprest.so.2.2입니다 '-L'은 런타임에 검색 할 경로를 설정하지 않았기 때문에 실행이 잘되지 않아야합니다. 전체 스토리를 말할 수는 없을 것입니다. 실행 파일과 라이브러리에'ldd'를 사용하고 환경을 확인하십시오 모든 경우에 동일합니다. 또한이'usr/lib/.. '는 무엇입니까? 루트로 실행하고'/ usr'에 모든 것을 덤프하고 있습니까? –

+0

.so가 연결되는 많은 .o 파일이있을 수 있다고 생각합니다. .so 디렉토리가 변경되면 해당 링크가 손상 될 수 있습니다. 내 추측이야. –

+1

".so 디렉토리가 변경되면 해당 링크가 손상 될 수 있습니다." 링커에게 그렇게하도록 지시 한 경우에만, 그렇지 않은 경우 링커에게 지시하십시오. 실행 파일과 라이브러리에'ldd'를 사용 했습니까? 출력물에 의심스러운 점이 있습니까? –

답변

1

(

SONAME의 libcpprest.so.2.2

,691,363 : 절차 https://git01.codeplex.com/casablanca는) https://casablanca.codeplex.com/wikipage?title=Setup%20and%20Build%20on%20Linux&referringTitle=Documentation

컴파일 후 나는 그 (objdump를 가진 libcpprest.so)를 얻을210

이므로 libcpprest.so.2.2를 /usr/lib/libcpprest.so.2.2

으로 복사하거나 ldconfig 도구를 사용하여 복사 할 수 있습니다.

당신은 발견 할 것이다 릴리스/build.release/바이너리로보고 :

libcpprest.so -> libcpprest.so.2.2 
libcpprest.so.2.2 

다음 libcpprest.so 그냥 링크이며, 실제 라이브러리는

+0

나는 symlink를 빌드해야한다고 생각한다. libcpprest.so -> libcpprest.so.2.2 –

+0

나는 오늘 아침에 그 일을 아주 빨리했고, 완료하기 전에 떠나야 만했다. 나는 나의 대답을 업데이트했다. 상대 링크로 복사하는 것만으로 충분하지 않기 때문에 원본 링크도 복사해야합니다. –

1

당신이 rpath 스위치에 의해 조정된다 언급하는 섹션 : 내 리눅스 데비안에 카사 블랑카를 컴파일 한

g ++ -Wl, -rpath,/경로 /에/lib에 ...

+0

나중에 시도해 보니 작동하지 않았다. –