当我将program_options链接到我的共享库时:
g++ -L/path_to_static_boost_libs -shared -o "test.so" ./test.o -lboost_program_options
由于abstract_variables_map :: operator []上的未定义引用,我无法加载库:
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库构建另一个程序(不是共享库),但未获得未定义的引用。
为什么我在链接共享库时会得到未定义的引用?
答案 0 :(得分:1)
第1步:找出未解析符号的 mangled 名称(应该已经显示在dlerror()
错误消息中)。
第2步:找出哪个的boost库为该符号提供了定义:
nm -A /path_to_static_boost_libs/*.a | grep <mangled-symbol-name>
第3步:将该库添加到test.so
。
第4步:获利。