連結時找不到C庫,錯誤編譯`boost :: program_options`的例子
在我的電腦上編譯.我正在執行Xubuntu Lucid Lynx全面更新.
它將使用g -c multiple_sources.cpp編譯沒有問題,但是當我嘗試連結並使用gulti_sources.o進行編寫時,我得到:
multiple_sources.cpp:(.text+0x3d): undefined reference to `boost::program_options::options_description::m_default_line_length' multiple_sources.cpp:(.text+0x87): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)' multiple_sources.cpp:(.text+0x15a): undefined reference to `boost::program_options::options_description::add_options()' multiple_sources.cpp:(.text+0x17b): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)' multiple_sources.cpp:(.text+0x193): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)' multiple_sources.cpp:(.text+0x1af): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)' multiple_sources.cpp:(.text+0x1eb): undefined reference to `boost::program_options::options_description::m_default_line_length' multiple_sources.cpp:(.text+0x252): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)' ...
等等噁心.
我有圖書館安裝:
>ls -l /usr/lib/libboost_program_options* -rw-r--r-- 1 root root 640800 2010-03-31 21:19 /usr/lib/libboost_program_options.a lrwxrwxrwx 1 root root26 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.a-> libboost_program_options.a lrwxrwxrwx 1 root root34 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.so -> libboost_program_options.so.1.40.0 lrwxrwxrwx 1 root root34 2010-04-09 00:57 /usr/lib/libboost_program_options.so -> libboost_program_options.so.1.40.0 -rw-r--r-- 1 root root 289336 2010-03-31 21:19 /usr/lib/libboost_program_options.so.1.40.0
閱讀g手冊頁後,我也試過:
> g -llibboost_program_options multiple_sources.cpp
> g -llibboost_program_options.a multiple_sources.cpp
> g -llibboost_program_options.so multiple_sources.cpp
>和所有上面的-L /usr/lib之前的-l
他們都失敗了,變化如下:
/usr/bin/ld: cannot find -llibboost_program_options.so collect2: ld returned 1 exit status
我究竟做錯了什麼?
-l引數是錯誤的擺脫lib預修復並使用-lboost_program_options.
連結器希望所有的庫以lib開始,並且在指定庫時要關閉它.
您還可以在檔案列表中包含檔案庫的完整路徑,而不包含-l(例如,g multiple_sources.cpp /usr/lib/libboost_program_options.so),但對於系統庫,最好遵循約定;它們並不總是安裝在/usr/lib中.
http://stackoverflow.com/questions/3355372/cannot-find-c-library-when-linking-error-compliling-the-boostprogram-optio