2012-04-09 2 views
0

Когда я связывая program_options к моей общей библиотеке с:неопределенные ссылки повышение :: program_options :: abstract_variables_map :: Оператор []

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'. –

+0

-lboost_system не помогает. – Raman

+0

опубликуйте код, который входит в 'test.so', чтобы мы могли воспроизвести поведение, которое вы видите. –

ответ

1

Шаг 1: узнать mangled имя неразрешенного символа (должно отображаться в сообщении об ошибке dlerror()).

Шаг 2: выяснить, которые библиотек наддува обеспечивает определение для этого символа:

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

Шаг 3: добавить эту библиотеку в связи линии test.so.

Шаг 4: прибыль.