boost::program_options 的链接错误
linking error for boost::program_options
我无法找出使用 boost::program_options 的 linking 错误。这是一个示例 C++ 代码:
# sample_code.cpp
#include <boost/program_options.hpp>
int main()
{
boost::program_options::options_description description("Test");
}
我还在 Yosemite 10.10.2 上使用 MacPorts 安装了 boost 1.57.0。这是相关的图书馆:
/opt/local/lib/libboost_program_options-mt.a
让我们编译并link这段代码:
alias g++='/opt/local/bin/g++-mp-5 -std=gnu++14 -I/opt/local/include -L/opt/local/lib'
g++ sample_code.cpp -lboost_program_options-mt
并且在 linking 期间失败:
Undefined symbols for architecture x86_64:
"boost::program_options::options_description::options_description(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)"
ld: symbol(s) not found for architecture x86_64
有什么想法吗?
正如 Petesh 在上面的评论中指出的那样,问题出在 MacPorts 如何使用 clang++
而不是 g++
构建 boost
而不是 g++
。
遗憾的是,MacPorts 不为 boost
!
提供任何 gcc
内置变体
解决办法很简单:你必须使用相同版本的编译器(或者至少它们应该兼容)来编译boost 和你的程序。当我的 boost 是用 GCC 4.8.3 编译的,而我的代码是用 GCC 5.3.0 编译的时,我遇到了链接错误。使用 GCC 5.3.0 构建 boost 后,链接问题消失了。
我无法找出使用 boost::program_options 的 linking 错误。这是一个示例 C++ 代码:
# sample_code.cpp
#include <boost/program_options.hpp>
int main()
{
boost::program_options::options_description description("Test");
}
我还在 Yosemite 10.10.2 上使用 MacPorts 安装了 boost 1.57.0。这是相关的图书馆:
/opt/local/lib/libboost_program_options-mt.a
让我们编译并link这段代码:
alias g++='/opt/local/bin/g++-mp-5 -std=gnu++14 -I/opt/local/include -L/opt/local/lib'
g++ sample_code.cpp -lboost_program_options-mt
并且在 linking 期间失败:
Undefined symbols for architecture x86_64:
"boost::program_options::options_description::options_description(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)"
ld: symbol(s) not found for architecture x86_64
有什么想法吗?
正如 Petesh 在上面的评论中指出的那样,问题出在 MacPorts 如何使用 clang++
而不是 g++
构建 boost
而不是 g++
。
遗憾的是,MacPorts 不为 boost
!
gcc
内置变体
解决办法很简单:你必须使用相同版本的编译器(或者至少它们应该兼容)来编译boost 和你的程序。当我的 boost 是用 GCC 4.8.3 编译的,而我的代码是用 GCC 5.3.0 编译的时,我遇到了链接错误。使用 GCC 5.3.0 构建 boost 后,链接问题消失了。