2013-07-30 126 views
0

好吧現在我試圖在Linux(Ubuntu 12.04)中使用boost C++庫,就像我以前在Windows中使用它們一樣。因此,使用一些示例代碼從Boost的網站/usr/bin/ld:找不到-llibboost

testfile.cpp

#include <boost/filesystem/convenience.hpp> 
#include <boost/foreach.hpp> 
#include <boost/range.hpp> 
#include <iostream> 

int main(int, char**) 
{ 
    namespace bf = boost::filesystem; 
    BOOST_FOREACH(bf::path path, 
     boost::make_iterator_range(
      bf::recursive_directory_iterator(bf::path("/home")), 
      bf::recursive_directory_iterator())) { 
    std::cout << path.string() << std::endl; 
} 
return 0; 
} 

應該很容易編譯使用此命令

g++ -L/usr/local/lib -o "testfile" -llibboost_filesystem 

我的問題我收到鏈接器錯誤

/usr/bin/ld: cannot find -llibboost_filesystem 

並且看起來似乎沒有圖剔除我缺少的東西。請幫忙。

+11

難道不該'-lboost_filesystem'? – arne

+0

是的,你的權利。我沒有意識到文件之間的命名約定在那裏改變了。謝謝 – Marstang

+0

[/ usr/bin/ld:找不到-llibboost \ _filesystem]的可能重複(http://stackoverflow.com/questions/11526546/usr-bin-ld-cannot-find-llibboost-filesystem) –

回答

0

按照慣例,庫名在大多數Linux發行版上使用前綴lib。指示鏈接程序搜索哪些庫時,應刪除此前綴。假設GNU ld鏈接,文檔說

-l namespec 
--library=namespec 

    Add the archive or object file specified by namespec to the list of files to 
    link. This option may be used any number of times. If namespec is of the 
    form :filename, ld will search the library path for a file called filename, 
    otherwise it will search the library path for a file called libnamespec.a. 

讓你無論是想

g++ -L/usr/local/lib -o "testfile" -lboost_filesystem 

g++ -L/usr/local/lib -o "testfile" -l :libboost_filesystem.so