Library-Abhängigkeiten entfernen



  • Hoi. 🙂

    Ich benutze in meinem Projekt mehrere Boost-Bibliotheken.
    Das ganze wird als dynamische Bibliothek kompiliert & gelinkt.

    Was mich aber enorm stört ist dass ein Nutzer meiner Library gegen boost_system und boost_filesystem linken muss.

    Der einzige Grund warum boost innerhalb der Headerfiles eingebunden wird ist die Tatsache dass 2 meiner Klassen boost::filesystem::path Variablen tragen sowie meine Exception-Klasse, die von boost::exception erbt.

    Wie könnte ich die Abhängigkeiten wegbekommen, damit man nicht mehr als Anwender die entsprechenden Libs dazulinken muss?

    Danke schon mal.
    Grüße,
    Ethon

    ||=== testethonmem, Debug ===|
    obj/Debug/main.o||In function \_\_static\_initialization\_and\_destruction_0':| /usr/include/boost/system/error\_code.hpp|205|undefined reference toboost::system::get_system_category()'|
    /usr/include/boost/system/error_code.hpp|206|undefined reference to boost::system::get\_generic_category()'| /usr/include/boost/system/error\_code.hpp|211|undefined reference toboost::system::get_generic_category()'|
    /usr/include/boost/system/error_code.hpp|212|undefined reference to boost::system::get\_generic_category()'| /usr/include/boost/system/error\_code.hpp|213|undefined reference toboost::system::get_system_category()'|
    /usr/local/lib/libethonmem.a(Debugger.cpp.o)||In function \_\_static\_initialization\_and\_destruction_0(int, int)':| Debugger.cpp:(.text+0x2bdf)||undefined reference toboost::system::get_system_category()'|
    Debugger.cpp:(.text+0x2be9)||undefined reference to boost::system::get\_generic\_category()'| Debugger.cpp:(.text+0x2bf3)||undefined reference toboost::system::get_generic_category()'|
    Debugger.cpp:(.text+0x2bfd)||undefined reference to boost::system::get\_generic\_category()'| Debugger.cpp:(.text+0x2c07)||undefined reference toboost::system::get_system_category()'|
    /usr/local/lib/libethonmem.a(Processes.cpp.o)||In function \_\_static\_initialization\_and\_destruction_0(int, int)':| Processes.cpp:(.text+0x292a)||undefined reference toboost::system::get_system_category()'|
    Processes.cpp:(.text+0x2934)||undefined reference to boost::system::get\_generic\_category()'| Processes.cpp:(.text+0x293e)||undefined reference toboost::system::get_generic_category()'|
    Processes.cpp:(.text+0x2948)||undefined reference to boost::system::get\_generic\_category()'| Processes.cpp:(.text+0x2952)||undefined reference toboost::system::get_system_category()'|
    /usr/local/lib/libethonmem.a(Processes.cpp.o)||In function boost::system::error\_code::error\_code()':| Processes.cpp:(.text.\_ZN5boost6system10error\_codeC1Ev[boost::system::error\_code::error\_code()]+0x10)||undefined reference toboost::system::get_system_category()'|
    /usr/local/lib/libethonmem.a(Processes.cpp.o)||In function boost::enable\_if<boost::filesystem::is\_basic\_path<boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path\_traits> >, bool>::type boost::filesystem::exists<boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path\_traits> >(boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)':| )]+0x3d)||undefined reference toboost::filesystem::detail::status_api(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::system::error_code&)'|
    /usr/local/lib/libethonmem.a(Processes.cpp.o)||In function boost::filesystem::basic\_directory\_iterator<boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path\_traits> >::m\_init(boost::filesystem::basic\_path<std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)':| )]+0x29)||undefined reference toboost::filesystem::detail::not_found_error()'|
    )]+0xc2)||undefined reference to boost::filesystem::detail::dir\_itr\_first(void*&, void*&, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > const&, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >&, boost::filesystem::file\_status&, boost::filesystem::file\_status&)'| /usr/local/lib/libethonmem.a(Processes.cpp.o)||In functionboost::filesystem::basic_directory_iterator<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >::increment()':|
    ::increment()]+0xf2)||undefined reference to boost::filesystem::detail::dir\_itr\_increment(void*&, void*&, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> >&, boost::filesystem::file\_status&, boost::filesystem::file\_status&)'| /usr/local/lib/libethonmem.a(Processes.cpp.o)||In functionboost::filesystem::detail::dir_itr_imp<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >::~dir_itr_imp()':|
    ::~dir_itr_imp()]+0x23)||undefined reference to `boost::filesystem::detail::dir_itr_close(void*&, void*&)'|
    ||=== Build finished: 21 errors, 0 warnings ===|



  • Entweder würde ich auf die Boost Libs verzichten, welche die Link Abhängigkeiten schaffen oder (würde ich favorisieren) ich würde die entsprechenden Boost Libs statisch in deine Library einbinden (mit VS geht das automatisch).

    Simon


Anmelden zum Antworten