2013-12-23 2 views
2

"boost/asio.hpp"가 포함 된 프로그램을 컴파일하는 데 문제가 있습니다. (부스트 사이트에서 가져온)이 프로그램을 컴파일
:부스트 문제 컴파일

example.cpp: 
#include <boost/lambda/lambda.hpp> 
#include <iostream> 
#include <iterator> 
#include <algorithm> 

int main() 
{ 
    using namespace boost::lambda; 
    typedef std::istream_iterator<int> in; 

    std::for_each(
     in(std::cin), in(), std::cout << (_1 * 3) << " "); 
} 

c++ -I path/to/boost_1_55_0 example.cpp -o example 

와 함께 잘 작동합니다.

boost/asio.hpp 

그리고 나는 그것을 컴파일하려고 해요 : 프로그램을 포함하지만 때 "예"를 실행하려고 할 때 발생하는

g++ -I /usr/local/boost_1_55_0 example.cpp -o example -lboost_system -lboost_thread 

실행,하지만 난이 오류를 받고 있어요 :

./example: error while loading shared libraries: libboost_system.so.1.55.0: cannot open shared object file: No such file or directory 

"libboost_system.so.1.55.0"파일은 "/ usr/local/lib"에 있습니다. 또한 함께 프로그램을 컴파일하려고 :

g++ -I /usr/local/boost_1_55_0 -L/usr/local/lib example.cpp -o example -lboost_system -lboost_thread 

그리고 같은 오류가 발생했습니다.

어떻게 해결할 수 있습니까?

답변

2

필요한 라이브러리를 찾을 위치를 링커에게 알려줘야합니다. 나는 이것에 대한 RPATH을 선호 :

실행에 /usr/local/lib를 굽는
g++ -I /usr/local/boost_1_55_0 -Wl,-rpath=/usr/local/lib example.cpp -o example -lboost_system -lboost_thread 

그렇게 ld 나중에 찾을 수 있습니다. 빌드 후 ldd example을 실행하면 ld이로드 될 것을 알 수 있습니다. RPATH를 추가하면 라이브러리를 찾을 수 있습니다.

또 다른 옵션은/usr/local/lib를 /etc/ld.so.conf의 시스템 검색 경로로 설정하는 것입니다.하지만 이것은 훨씬 더 무겁습니다.

2

LD_LIBRARY_PATH를 (를) 내보내기 LD_LIBRARY_PATH를 (를) 설정 LD_LIBRARY_PATH = 부스트 할 경로