2012-04-09 20 views
0

Wenn ich program_options meine gemeinsam benutzte Bibliothek Verknüpfung mit:undefined reference boost :: program_options :: abstract_variables_map :: operator []

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

Ich kann nicht Bibliothek geladen werden, da nicht definierter Referenz auf 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 

ich habe versucht, ein anderes Programm (nicht gemeinsam genutzte Bibliothek) mit program_options Bibliothek statisch gelinkt zu bauen und nicht undefiniert Referenz erhalten.

Warum bekomme ich undefinierte Referenz, wenn ich Shared Library verknüpfe?

+2

Versuchen Sie, '-lboost_system' hinzuzufügen. –

+0

-lboost_system hilft nicht. – Raman

+0

poste den Code, der in 'test.so' geht, damit wir das Verhalten reproduzieren können, das du siehst. –

Antwort

1

Schritt 1: herausfinden verstümmelt Name des ungelösten Symbols (sollte bereits in der dlerror() Fehlermeldung angezeigt werden).

Schritt 2: Finden Sie heraus, die der Boost-Bibliotheken Definition für dieses Symbol lautet:

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

Schritt 3: die Bibliothek auf die Verbindungslinie von test.so hinzuzufügen.

Schritt 4: Profit.

Verwandte Themen