2012-04-09 80 views
0

当我连接program_options到我的共享库:未定义参考的boost :: program_options :: abstract_variables_map :: operator []的

g++ -L/path_to_static_boost_libs -shared -o "test.so" ./test.o -lboost_program_options 

我无法加载,因为对abstract_variables_map未定义的参考图书馆::运营商[]:

0009b9f8 W int const& boost::program_options::variable_value::as<int>() const 
     U boost::program_options::abstract_variables_map::operator[](std::string const&) const 
0009b55e W boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >::clone() const 

我试图建立另一个程序(不共享库)与program_options库静态链接的,并没有得到未定义的引用。

为什么我在链接共享库时遇到未定义的引用?

+2

尝试添加'-lboost_system'。 – 2012-04-09 19:45:41

+0

-lboost_system没有帮助。 – Raman 2012-04-09 20:00:13

+0

发布进入'test.so'的代码,以便我们可以重现您所看到的行为。 – 2012-04-11 16:11:09

回答

1

第1步:找出mangled未解析符号的名称(应已显示在dlerror()错误消息中)。

步骤2:找出其中升压库该符号提供的定义:

nm -A /path_to_static_boost_libs/*.a | grep <mangled-symbol-name> 

步骤3:该库添加到的test.so链接行。

第4步:获利。