2013-12-23 125 views
2

我在編譯包含「boost/asio.hpp」的程序時遇到問題。
編譯這個程序(從升壓現場拍攝):用boost編譯問題

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此:

g++ -I /usr/local/boost_1_55_0 -Wl,-rpath=/usr/local/lib example.cpp -o example -lboost_system -lboost_thread 

這烘烤/usr/local/lib到可執行這樣ld以後能找到它。你可以看到ld會在建立後通過運行ldd example加載。我現在打賭它說「找不到」,並添加RPATH後,它會找到庫。

另一種方法是將/ usr/local/lib設置爲/etc/ld.so.conf中的系統搜索路徑,但這樣做相當重量級。

2

將LD_LIBRARY_PATH設置爲出口LD_LIBRARY_PATH =提升路徑