20

私は自分のコンピューターでコンパイルするためにmultiple_sources.cppをコンパイルしようとしています。完全に更新されたXubuntuLucidLynxを実行しています。

問題なくコンパイルされますg++ -c multiple_sources.cppが、リンクして実行可能にしようとすると、次のようg++ multiple_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)'
...

et ceteraadnauseum

ライブラリをインストールしています:

>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 root     26 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.a     -> libboost_program_options.a
lrwxrwxrwx 1 root root     34 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.so -> libboost_program_options.so.1.40.0
lrwxrwxrwx 1 root root     34 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

私は何が間違っているのですか?

4

1 に答える 1

28

-lパラメータが間違っています。プレフィックスを削除libして使用します-lboost_program_options

リンカは、すべてのライブラリがで始まることを想定しておりlib、ライブラリを指定するときにそれを省略します。

-l(例)なしで、ファイルのリストにライブラリへのフルパスを含めることもできますg++ multiple_sources.cpp /usr/lib/libboost_program_options.soが、システムライブラリの場合は、規則に従うことをお勧めします。に常にインストールされているわけではありません/usr/lib

于 2010-07-28T17:08:05.507 に答える