c++ - 链接时找不到 C++ 库,编译 `boost::program_options` 示例时出错

标签 c++ boost boost-program-options

我正在尝试编译 multiple_sources.cpp在我的电脑上编译。我正在运行完全更新的 Xubuntu Lucid Lynx。

使用 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)'
...

等等令人作呕的

我确实安装了库:

>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++ man page,我也试过了:

  • 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 before -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 中。

关于c++ - 链接时找不到 C++ 库,编译 `boost::program_options` 示例时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3355372/

相关文章:

c++ - 如何使用 boost asio 通过 UDP 套接字发送 std::vector of unsigned char?

boost - 如何更改 boost 版本变体以使用 cxxflags=-O2?

c++ - 是否可以在没有 RTTI 的情况下使用 Boost Program Options?

c++ - boost::Program_options 如何在值中支持散列字符?

c++ - 我们如何通过消息抛出异常?

c++ - 如何处理接口(interface)中的析构函数

c# - C++ 中的 <map> 的 C# 等价物是什么?

c++ - 并行快速排序 boost::thread

command-line - 使用 boost::program_options

c++ - Qt - 如何将多个 QGroupBox 添加到 QTabWidget?