2014-02-14 32 views
0

(我知道類似的問題已經張貼在這裏好幾次,但我恰恰在發佈新因爲提出的解決方案似乎並不在我的情況下工作!)不能因此鏈接boost_program_options

,我試圖編譯一個使用boost :: program_options的非常簡單的程序。我的boost庫安裝在/ usr/lib /中。如果我輸入ls /usr/lib/ | grep program_options,我得到以下內容:

libboost_program_options-mt.a 
libboost_program_options-mt.so 
libboost_program_options.a 
libboost_program_options.so 
libboost_program_options.so.1.46.1 

所以lib就在那裏。然而,當我嘗試通過g++ -L/usr/lib/ -lboost_program_options main.cpp進行編譯時,我收到了很多「未定義的引用......」的錯誤(我認爲它在這裏不適用於c/c)。

如果鍵入ld -lboost_program_options --verbose,我得到這個:

attempt to open /usr/x86_64-linux-gnu/lib64/libboost_program_options.so failed 
attempt to open /usr/x86_64-linux-gnu/lib64/libboost_program_options.a failed 
attempt to open /usr/local/lib/x86_64-linux-gnu/libboost_program_options.so failed 
attempt to open /usr/local/lib/x86_64-linux-gnu/libboost_program_options.a failed 
attempt to open /usr/local/lib64/libboost_program_options.so failed 
attempt to open /usr/local/lib64/libboost_program_options.a failed 
attempt to open /lib/x86_64-linux-gnu/libboost_program_options.so failed 
attempt to open /lib/x86_64-linux-gnu/libboost_program_options.a failed 
attempt to open /lib64/libboost_program_options.so failed 
attempt to open /lib64/libboost_program_options.a failed 
attempt to open /usr/lib/x86_64-linux-gnu/libboost_program_options.so failed 
attempt to open /usr/lib/x86_64-linux-gnu/libboost_program_options.a failed 
attempt to open /usr/lib64/libboost_program_options.so failed 
attempt to open /usr/lib64/libboost_program_options.a failed 
attempt to open /usr/local/lib/libboost_program_options.so failed 
attempt to open /usr/local/lib/libboost_program_options.a failed 
attempt to open /lib/libboost_program_options.so failed 
attempt to open /lib/libboost_program_options.a failed 
attempt to open /usr/lib/libboost_program_options.so succeeded 
-lboost_program_options (/usr/lib/libboost_program_options.so) 
libstdc++.so.6 needed by /usr/lib/libboost_program_options.so 
found libstdc++.so.6 at /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
libgcc_s.so.1 needed by /usr/lib/libboost_program_options.so 
found libgcc_s.so.1 at /lib/x86_64-linux-gnu/libgcc_s.so.1 
libpthread.so.0 needed by /usr/lib/libboost_program_options.so 
found libpthread.so.0 at /lib/x86_64-linux-gnu/libpthread.so.0 
libc.so.6 needed by /usr/lib/libboost_program_options.so 
found libc.so.6 at /lib/x86_64-linux-gnu/libc.so.6 
libm.so.6 needed by /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
found libm.so.6 at /lib/x86_64-linux-gnu/libm.so.6 
ld-linux-x86-64.so.2 needed by /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
found ld-linux-x86-64.so.2 at /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 
ld: warning: cannot find entry symbol _start; not setting start address 

所以它實際上找到的lib(在尋找許多不同的地方以後),但最後很奇怪混亂的一切行動。

有什麼想法?

編輯: 這裏是 「未定義參考...」 錯誤:

main.cpp:(.text+0x29): undefined reference to `boost::program_options::options_description::m_default_line_length' 
main.cpp:(.text+0x35): undefined reference to `boost::program_options::options_description::m_default_line_length' 
main.cpp:(.text+0x6e): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' 
main.cpp:(.text+0xa4): undefined reference to `boost::program_options::options_description::add_options()' 
main.cpp:(.text+0xbe): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)' 
main.cpp:(.text+0xd3): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)' 
main.cpp:(.text+0xe2): undefined reference to `boost::program_options::variables_map::variables_map()' 
main.cpp:(.text+0x13c): undefined reference to `boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)' 

而完成的緣故,代碼的短位涉及升壓:

options_description desc("Allowed options"); 
     desc.add_options() 
      ("help,h","Display help") 
      ("file,f",value<string>(&dataFile),"Path to the file containing the data"); 

     variables_map vm; 
     store(parse_command_line(argc, argv, desc), vm); 

當然在文件的開頭有#include <boost/program_options.hpp>

+0

一個想到的就是一個鏈接順序問題。嘗試在源文件後面加上'-lboost_program_options'。 –

+0

@FredLarson:好吧,現在它可以工作......考慮到解決方案的簡單性,我感到有點愚蠢。我並不知道參數的順序是重要的,只要它們之前有標誌。很高興知道... – jerorx

回答

0

我認爲你的編譯/鏈接行不正確。

g++ -L/usr/lib/ -lboost_program_options main.cpp 

應該是:

g++ -L/usr/lib/ main.cpp -lboost_program_options 

欲瞭解更多信息,看看這個罰款答案:https://stackoverflow.com/a/409470/10077

+0

是的,它現在可以工作。看到我對你評論的評論,關於我對此感到驚訝。非常感謝,無論如何! – jerorx