2016-03-18 103 views
3

所以我想編譯和運行一個簡單的升壓定時程序故障使用升壓,無法打開共享對象文件

#include <iostream> 
#include <boost/asio.hpp> 
#include <boost/date_time/posix_time/posix_time.hpp> 


int main() { 
    using namespace boost::asio; 
    io_service io; 
    deadline_timer t(io, boost::posix_time::seconds(5)); 
    t.wait(); 
    std::cout << "Hello World!" << std::endl; 

    return 0; 
} 

我想的第一件事,當編譯這個程序是做

g++ -I /home/vagrant/boost_1_60_0 main.cpp 

這給了我的

/tmp/cc8Ytqko.o: In function `__static_initialization_and_destruction_0(int, int)': 
main.cpp:(.text+0xfc): undefined reference to `boost::system::generic_category()' 
main.cpp:(.text+0x108): undefined reference to `boost::system::generic_category()' 
main.cpp:(.text+0x114): undefined reference to `boost::system::system_category()' 
/tmp/cc8Ytqko.o: In function `boost::system::error_code::error_code()': 
main.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()' 
/tmp/cc8Ytqko.o: In function `boost::asio::error::get_system_category()': 
main.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

錯誤於是我做了一些研究,似乎我需要建立boost_system二進制文件,所以我去了目錄boost定位於就跑

./bootstrap.sh 
./b2 --with-system 

然後我再

g++ -I /home/vagrant/boost_1_60_0 main.cpp -L/home/vagrant/boost_1_60_0/stage/lib/ -lboost_system 

編譯,這並沒有給我任何錯誤,但是當我跑的可執行

[email protected]:/vagrant$ ./a.out 
./a.out: error while loading shared libraries: libboost_system.so.1.60.0: cannot open shared object file: No such file or directory 

不知道我在這裏需要做什麼

回答

3

liibboost_system.so.1.60.0不能成立d在由動態鏈接器搜索的目錄列表中。默認情況下,非默認共享對象位置不存儲在二進制文件中。環境變量LD_LIBRARY_PATH可用於添加將標準位置之前搜索的目錄:

LD_LIBRARY_PATH=/home/vagrant/boost_1_60_0/stage/lib/ ./a.out 

這隻會爲current bash environment工作,也有讓不需要的環境變量的方法來store the path in the executable

+0

如果我想靜態鏈接庫而不是使用動態鏈接,應該做什麼? – vicg

+1

將[link = static](http://www.boost.org/build/doc/html/bbv2/tutorial/linkage.html)添加到boost構建選項,然後[直接指定.a文件](http ://stackoverflow.com/questions/4156055/gcc-static-linking-only-some-libraries)而不是'-l'命令。 –

相關問題