2015-03-30 145 views
1

我找不到链接错误使用boost :: program_options。这里是一个示例c + +代码:链接错误升压:: program_options

# sample_code.cpp 
#include <boost/program_options.hpp> 
int main() 
{ 
    boost::program_options::options_description description("Test"); 
} 

我也已经安装了使用优胜美地10.10.2上的MacPorts提升1.57.0。下面是相关的库:

/opt/local/lib/libboost_program_options-mt.a 

让我们编译和链接下面的代码:

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 

同时在连接过程失败:

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 

有什么想法?

+0

如果您在别名用法中颠倒编译器参数的顺序,它是否工作?如果是这样,http://stackoverflow.com/a/24675715/962089 – chris 2015-03-30 19:06:32

+0

不是真的。我也尝试过使用clang ++和CMake以及其所有与boost相关的参数,这没有任何帮助! – 2015-03-30 19:20:37

+0

你是什么意思的“不是真的”?库_does_在'.cpp'之后。 – 2015-03-30 19:26:34

回答

0

正如Petesh在上述评论中指出的那样,问题变成了MacPorts如何使用clang++而不是g++构建boost

不幸的是,MacPorts不提供任何gcc构建的变种boost

0

解决方案很简单:您必须使用相同版本的编译器(或至少它们应该兼容)来编译boost和您的程序。当我的boost使用GCC 4.8.3编译,我的代码正在使用GCC 5.3.0编译时,我得到了链接错误。在用GCC 5.3.0构建boost之后,链接问题就消失了。