Static Wt Linking

Added by Hard Coder over 6 years ago

After testing wt for a while now I want to statically link my app to the wt library. I am fed up with various instructions of building wt statically none of which works for me. Is it possible to just link with the existing wt library in /usr/libwt.a etc.... and giving -static as a compiler arguement to g++ and successfully make a static app?.. I have tried this but a bunch of error message has been popping up.... So far I have tried

g++ -o main.exe main.cpp -static /usr/lib/libwtfcgi.a /usr/lib/libwt.a /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/libstdc++.a /usr/lib/libboost_signals.a /usr/lib/i386-linux-gnu/libz.a /usr/lib/libssl.a /usr/lib/libcrypto.a /usr/lib/libboost_thread.a /usr/lib/libboost_filesystem.a /usr/lib/libboost_date_time.a /usr/lib/i386-linux-gnu/libpthread.a /usr/lib/libboost_regex.a /usr/lib/libboost_system.a /usr/lib/i386-linux-gnu/librt.a /usr/lib/i386-linux-gnu/libdl.a /usr/lib/libicudata.a /usr/lib/libicui18n.a /usr/lib/libicuuc.a /usr/lib/i386-linux-gnu/libm.a /usr/lib/i386-linux-gnu/libc.a

If I cant go this way, please guide me on making my static wt app. I have installed wt from the ubuntu repositories via sudo apt-get install witty witty-dev etc......


Replies (12)

RE: Static Wt Linking - Added by Koen Deforche over 6 years ago

Hey,

the "bunch of error messages" surely are a useful place to start understanding what is missing ?

Static linking has the annoyance that you need to explicitly link to all dependent libraries as well, thus you need to specify all of them (but all of them can be either static or dynamic).

Regards,
koen

RE: Static Wt Linking - Added by Claudio White about 1 month ago

I am trying to create a static WT App too (Linux CentOS 7 with WT 4.0.4, Boost 1.53 and Devtoolset7), but i get errors on linker.

I did install boost-static and did create wt static with these options:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS="-static -static-libgcc -static-libstdc++ -lpthread -s" -DBoost_USE_STATIC_LIBS=ON -DSHARED_LIBS=OFF ../../

Everything til compile MyWittyApp is working, but linking produces errors (note: without -static linking is working and creates the binary MyWittyApp):

/opt/rh/devtoolset-7/root/usr/bin/x86_64-redhat-linux-g++ -o ./ReleaseS/MyWittyApp -L. -L/usr/local/lib -L/usr/local/lib64 -L/usr/lib -L/usr/lib64 -lwt -lwthttp -lwtdbo -lwtdbosqlite3 -lwtdbopostgres -lwttest -lboost_context -lboost_chrono -lboost_date_time -lboost_filesystem -lboost_graph -lboost_iostreams -lboost_locale-mt -lboost_math_c99 -lboost_math_c99f -lboost_math_c99l -lboost_math_tr1 -lboost_prg_exec_monitor -lboost_program_options -lboost_python -lboost_random -lboost_regex -lboost_serialization -lboost_signals -lboost_system -lboost_thread-mt -lboost_timer -lboost_unit_test_framework -lboost_wave -lboost_wserialization -lhpdf -lpthread -static

Following the Output - hopefully anyone can help me what could be wrong or is missing?

/usr/local/lib/libwt.a(Client.C.o): In function `boost::asio::detail::resolver_service<boost::asio::ip::tcp>::resolve(std::shared_ptr<void>&, boost::asio::ip::basic_resolver_query<boost::asio::ip::tcp> const&, boost::system::error_code&)':
Client.C:(.text._ZN5boost4asio6detail16resolver_serviceINS0_2ip3tcpEE7resolveERSt10shared_ptrIvERKNS3_20basic_resolver_queryIS4_EERNS_6system10error_codeE[_ZN5boost4asio6detail16resolver_serviceINS0_2ip3tcpEE7resolveERSt10shared_ptrIvERKNS3_20basic_resolver_queryIS4_EERNS_6system10error_codeE]+0x99): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `(anonymous namespace)::addTrueTypePattern(FcPattern*, void*)':
FontSupportPango.C:(.text+0x33): undefined reference to `FcPatternAddString'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::createFontDescription(Wt::WFont const&) const':
FontSupportPango.C:(.text+0x4f4): undefined reference to `pango_font_description_from_string'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::~FontSupport()':
FontSupportPango.C:(.text+0x962): undefined reference to `g_object_unref'
FontSupportPango.C:(.text+0x96b): undefined reference to `pango_font_description_free'
FontSupportPango.C:(.text+0x97d): undefined reference to `g_object_unref'
FontSupportPango.C:(.text+0x9bb): undefined reference to `g_object_unref'
FontSupportPango.C:(.text+0x9ce): undefined reference to `g_object_unref'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::fontPath(_PangoFont*)':
FontSupportPango.C:(.text+0xa20): undefined reference to `pango_fc_font_lock_face'
FontSupportPango.C:(.text+0xa55): undefined reference to `pango_fc_font_unlock_face'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::FontSupport(Wt::WPaintDevice*, Wt::FontSupport::EnabledFontFormats)':
FontSupportPango.C:(.text+0xbba): undefined reference to `pango_font_map_create_context'
FontSupportPango.C:(.text+0xc01): undefined reference to `pango_ft2_font_map_new'
FontSupportPango.C:(.text+0xc10): undefined reference to `pango_ft2_font_map_get_type'
FontSupportPango.C:(.text+0xc1b): undefined reference to `g_type_check_instance_cast'
FontSupportPango.C:(.text+0xc2c): undefined reference to `pango_ft2_font_map_set_default_substitute'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::matchFont(Wt::WFont const&) const':
FontSupportPango.C:(.text+0xd67): undefined reference to `pango_font_map_load_font'
FontSupportPango.C:(.text+0xd76): undefined reference to `pango_context_set_font_description'
FontSupportPango.C:(.text+0xd88): undefined reference to `g_object_unref'
FontSupportPango.C:(.text+0xd95): undefined reference to `pango_font_description_free'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::fontMetrics(Wt::WFont const&)':
FontSupportPango.C:(.text+0xfbd): undefined reference to `pango_font_get_metrics'
FontSupportPango.C:(.text+0xfc8): undefined reference to `pango_font_metrics_get_ascent'
FontSupportPango.C:(.text+0xfe6): undefined reference to `pango_font_metrics_get_descent'
FontSupportPango.C:(.text+0x107a): undefined reference to `pango_font_metrics_unref'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::layoutText(Wt::WFont const&, std::string const&, std::vector<_PangoGlyphString*, std::allocator<_PangoGlyphString*> >&, int&)':
FontSupportPango.C:(.text+0x1169): undefined reference to `pango_attr_list_new'
FontSupportPango.C:(.text+0x117d): undefined reference to `pango_context_set_font_description'
FontSupportPango.C:(.text+0x1194): undefined reference to `pango_itemize'
FontSupportPango.C:(.text+0x1283): undefined reference to `pango_glyph_string_new'
FontSupportPango.C:(.text+0x129c): undefined reference to `pango_shape'
FontSupportPango.C:(.text+0x12d2): undefined reference to `pango_glyph_string_get_width'
FontSupportPango.C:(.text+0x12ec): undefined reference to `pango_attr_list_unref'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::measureText(Wt::WFont const&, Wt::WString const&, double, bool)':
FontSupportPango.C:(.text+0x1490): undefined reference to `g_utf8_strlen'
FontSupportPango.C:(.text+0x14d9): undefined reference to `pango_language_from_string'
FontSupportPango.C:(.text+0x1502): undefined reference to `pango_get_log_attrs'
FontSupportPango.C:(.text+0x1578): undefined reference to `g_utf8_offset_to_pointer'
FontSupportPango.C:(.text+0x1670): undefined reference to `g_utf8_offset_to_pointer'
FontSupportPango.C:(.text+0x1965): undefined reference to `pango_glyph_string_free'
FontSupportPango.C:(.text+0x198e): undefined reference to `pango_item_free'
FontSupportPango.C:(.text+0x1996): undefined reference to `g_list_foreach'
FontSupportPango.C:(.text+0x199e): undefined reference to `g_list_free'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::drawText(Wt::WFont const&, Wt::WRectF const&, Wt::WTransform const&, Wt::FontSupport::Bitmap&, Wt::WFlags<Wt::AlignmentFlag>, Wt::WString const&)':
FontSupportPango.C:(.text+0x1df2): undefined reference to `pango_context_set_matrix'
FontSupportPango.C:(.text+0x1edb): undefined reference to `pango_matrix_get_font_scale_factor'
FontSupportPango.C:(.text+0x1f3e): undefined reference to `pango_context_set_matrix'
FontSupportPango.C:(.text+0x1f8b): undefined reference to `pango_font_get_metrics'
FontSupportPango.C:(.text+0x1f96): undefined reference to `pango_font_metrics_get_ascent'
FontSupportPango.C:(.text+0x1fb4): undefined reference to `pango_font_metrics_get_descent'
FontSupportPango.C:(.text+0x1fd6): undefined reference to `pango_font_metrics_unref'
FontSupportPango.C:(.text+0x20bf): undefined reference to `pango_ft2_render_transformed'
FontSupportPango.C:(.text+0x20c7): undefined reference to `pango_glyph_string_get_width'
FontSupportPango.C:(.text+0x20eb): undefined reference to `pango_glyph_string_free'
FontSupportPango.C:(.text+0x20f3): undefined reference to `pango_item_free'
FontSupportPango.C:(.text+0x210b): undefined reference to `g_list_free'
/usr/local/lib/libwt.a(FontSupportPango.C.o): In function `Wt::FontSupport::drawText(Wt::WFont const&, Wt::WRectF const&, Wt::WFlags<Wt::AlignmentFlag>, Wt::WString const&)':
FontSupportPango.C:(.text+0x258e): undefined reference to `pango_item_free'
FontSupportPango.C:(.text+0x2598): undefined reference to `pango_glyph_string_free'
FontSupportPango.C:(.text+0x25c2): undefined reference to `g_list_free'
/usr/local/lib/libwthttp.a(WServer.C.o): In function `boost::asio::error::detail::ssl_category::message(int) const':
WServer.C:(.text._ZNK5boost4asio5error6detail12ssl_category7messageEi[_ZNK5boost4asio5error6detail12ssl_category7messageEi]+0xc): undefined reference to `ERR_reason_error_string'
/usr/local/lib/libwthttp.a(WServer.C.o): In function `std::_Sp_counted_ptr<boost::asio::ssl::detail::openssl_init_base::do_init*, (
_gnu_cxx::_Lock_policy)2>::_M_dispose()':
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x18): undefined reference to `CRYPTO_set_id_callback'
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x1f): undefined reference to `CRYPTO_set_locking_callback'
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x24): undefined reference to `ERR_free_strings'
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x2b): undefined reference to `ERR_remove_state'
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x30): undefined reference to `EVP_cleanup'
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x35): undefined reference to `CRYPTO_cleanup_all_ex_data'
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x3f): undefined reference to `CONF_modules_unload'
WServer.C:(.text._ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost4asio3ssl6detail17openssl_init_base7do_initELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x44): undefined reference to `ENGINE_cleanup'
/usr/local/lib/libwthttp.a(WServer.C.o): In function `boost::asio::ssl::detail::openssl_init_base::do_init::~do_init()':
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0xe): undefined reference to `CRYPTO_set_id_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0x15): undefined reference to `CRYPTO_set_locking_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0x1a): undefined reference to `ERR_free_strings'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0x21): undefined reference to `ERR_remove_state'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0x26): undefined reference to `EVP_cleanup'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0x2b): undefined reference to `CRYPTO_cleanup_all_ex_data'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0x35): undefined reference to `CONF_modules_unload'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_initD2Ev[_ZN5boost4asio3ssl6detail17openssl_init_base7do_initD5Ev]+0x3a): undefined reference to `ENGINE_cleanup'
/usr/local/lib/libwthttp.a(WServer.C.o): In function `boost::asio::ssl::detail::openssl_init_base::instance()':
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv[_ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv]+0x95): undefined reference to `SSL_library_init'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv[_ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv]+0x9a): undefined reference to `SSL_load_error_strings'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv[_ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv]+0x9f): undefined reference to `OPENSSL_add_all_algorithms_noconf'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv[_ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv]+0xa4): undefined reference to `CRYPTO_num_locks'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv[_ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv]+0x276): undefined reference to `CRYPTO_set_locking_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv[_ZN5boost4asio3ssl6detail17openssl_init_base8instanceEv]+0x280): undefined reference to `CRYPTO_set_id_callback'
/usr/local/lib/libwthttp.a(WServer.C.o): In function `boost::asio::ssl::detail::openssl_init_base::do_init::openssl_locking_func(int, int, char const*, int)':
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x19d): undefined reference to `SSL_library_init'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x1a2): undefined reference to `SSL_load_error_strings'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x1a7): undefined reference to `OPENSSL_add_all_algorithms_noconf'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x1ac): undefined reference to `CRYPTO_num_locks'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x28d): undefined reference to `SSL_library_init'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x292): undefined reference to `SSL_load_error_strings'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x297): undefined reference to `OPENSSL_add_all_algorithms_noconf'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x29c): undefined reference to `CRYPTO_num_locks'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x59e): undefined reference to `CRYPTO_set_locking_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x5a8): undefined reference to `CRYPTO_set_id_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x616): undefined reference to `CRYPTO_set_locking_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init20openssl_locking_funcEiiPKci]+0x620): undefined reference to `CRYPTO_set_id_callback'
/usr/local/lib/libwthttp.a(WServer.C.o): In function `boost::asio::ssl::detail::openssl_init_base::do_init::openssl_id_func()':
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x155): undefined reference to `SSL_library_init'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x15a): undefined reference to `SSL_load_error_strings'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x15f): undefined reference to `OPENSSL_add_all_algorithms_noconf'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x164): undefined reference to `CRYPTO_num_locks'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x326): undefined reference to `CRYPTO_set_locking_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x330): undefined reference to `CRYPTO_set_id_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x495): undefined reference to `SSL_library_init'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x49a): undefined reference to `SSL_load_error_strings'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x49f): undefined reference to `OPENSSL_add_all_algorithms_noconf'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x4a4): undefined reference to `CRYPTO_num_locks'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x676): undefined reference to `CRYPTO_set_locking_callback'
WServer.C:(.text._ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv[_ZN5boost4asio3ssl6detail17openssl_init_base7do_init15openssl_id_funcEv]+0x680): undefined reference to `CRYPTO_set_id_callback'
/usr/local/lib/libwthttp.a(Server.C.o): In function `http::server::Server::start()':
Server.C:(.text+0x65e1): undefined reference to `SSL_CTX_ctrl'
Server.C:(.text+0x6631): undefined reference to `SSL_CTX_use_certificate_chain_file'
Server.C:(.text+0x6647): undefined reference to `ERR_get_error'
Server.C:(.text+0x6682): undefined reference to `SSL_CTX_use_PrivateKey_file'
Server.C:(.text+0x6698): undefined reference to `ERR_get_error'
Server.C:(.text+0x66cc): undefined reference to `BIO_new_file'
Server.C:(.text+0x66e6): undefined reference to `PEM_read_bio_DHparams'
Server.C:(.text+0x66fa): undefined reference to `BIO_free'
Server.C:(.text+0x6710): undefined reference to `SSL_CTX_ctrl'
Server.C:(.text+0x671b): undefined reference to `DH_free'
Server.C:(.text+0x6732): undefined reference to `ERR_get_error'
Server.C:(.text+0x675e): undefined reference to `SSL_CTX_ctrl'
Server.C:(.text+0x678d): undefined reference to `SSL_CTX_ctrl'
Server.C:(.text+0x67aa): undefined reference to `SSL_CTX_set_session_id_context'
Server.C:(.text+0x683f): undefined reference to `BIO_free'
Server.C:(.text+0x6886): undefined reference to `SSL_CTX_set_cipher_list'
/usr/local/lib/libwthttp.a(Server.C.o): In function `http::server::Server::Server(http::server::Configuration const&, Wt::WServer&)':
Server.C:(.text+0x6f59): undefined reference to `SSLv23_method'
Server.C:(.text+0x6f61): undefined reference to `SSL_CTX_new'
Server.C:(.text+0x7379): undefined reference to `ERR_get_error'
/usr/local/lib/libwthttp.a(Server.C.o): In function `boost::asio::ssl::context::set_verify_mode(int)':
Server.C:(.text._ZN5boost4asio3ssl7context15set_verify_modeEi[_ZN5boost4asio3ssl7context15set_verify_modeEi]+0x14): undefined reference to `SSL_CTX_get_verify_callback'
Server.C:(.text._ZN5boost4asio3ssl7context15set_verify_modeEi[_ZN5boost4asio3ssl7context15set_verify_modeEi]+0x21): undefined reference to `SSL_CTX_set_verify'
/usr/local/lib/libwthttp.a(Server.C.o): In function `boost::asio::ssl::context::load_verify_file(std::string const&)':
Server.C:(.text._ZN5boost4asio3ssl7context16load_verify_fileERKSs[_ZN5boost4asio3ssl7context16load_verify_fileERKSs]+0x27): undefined reference to `SSL_CTX_load_verify_locations'
Server.C:(.text._ZN5boost4asio3ssl7context16load_verify_fileERKSs[_ZN5boost4asio3ssl7context16load_verify_fileERKSs]+0x3c): undefined reference to `ERR_get_error'
/usr/local/lib/libwthttp.a(Server.C.o): In function `boost::asio::ssl::context::~context()':
Server.C:(.text._ZN5boost4asio3ssl7contextD2Ev[_ZN5boost4asio3ssl7contextD5Ev]+0x35): undefined reference to `SSL_CTX_get_ex_data'
Server.C:(.text._ZN5boost4asio3ssl7contextD2Ev[_ZN5boost4asio3ssl7contextD5Ev]+0x44): undefined reference to `SSL_CTX_get_ex_data'
Server.C:(.text._ZN5boost4asio3ssl7contextD2Ev[_ZN5boost4asio3ssl7contextD5Ev]+0x5e): undefined reference to `SSL_CTX_set_ex_data'
Server.C:(.text._ZN5boost4asio3ssl7contextD2Ev[_ZN5boost4asio3ssl7contextD5Ev]+0x66): undefined reference to `SSL_CTX_free'
/usr/local/lib/libwthttp.a(Server.C.o): In function `boost::system::error_code boost::asio::ssl::context::set_password_callback<std::function<std::string (unsigned long, int)> >(std::function<std::string (unsigned long, int)>, boost::system::error_code&)':
Server.C:(.text._ZN5boost4asio3ssl7context21set_password_callbackISt8functionIFSsmiEEEENS_6system10error_codeET_RS8_[_ZN5boost4asio3ssl7context21set_password_callbackISt8functionIFSsmiEEEENS_6system10error_codeET_RS8_]+0x61): undefined reference to `SSL_CTX_set_default_passwd_cb'
/usr/local/lib/libwthttp.a(Server.C.o): In function `http::server::SslConnection::~SslConnection()':
Server.C:(.text._ZN4http6server13SslConnectionD2Ev[_ZN4http6server13SslConnectionD5Ev]+0x23a): undefined reference to `SSL_get_ex_data'
Server.C:(.text._ZN4http6server13SslConnectionD2Ev[_ZN4http6server13SslConnectionD5Ev]+0x24d): undefined reference to `SSL_get_ex_data'
Server.C:(.text._ZN4http6server13SslConnectionD2Ev[_ZN4http6server13SslConnectionD5Ev]+0x26b): undefined reference to `SSL_set_ex_data'
Server.C:(.text._ZN4http6server13SslConnectionD2Ev[_ZN4http6server13SslConnectionD5Ev]+0x277): undefined reference to `BIO_free'
Server.C:(.text._ZN4http6server13SslConnectionD2Ev[_ZN4http6server13SslConnectionD5Ev]+0x283): undefined reference to `SSL_free'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::get_output(boost::asio::mutable_buffer const&) [clone .isra.54]':
SslConnection.C:(.text+0x1b): undefined reference to `BIO_read'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::put_input(boost::asio::const_buffer const&) [clone .isra.55]':
SslConnection.C:(.text+0x4b): undefined reference to `BIO_write'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `http::server::SslConnection::SslConnection(boost::asio::io_service&, http::server::Server*, boost::asio::ssl::context&, http::server::ConnectionManager&, http::server::RequestHandler&)':
SslConnection.C:(.text+0x1393): undefined reference to `SSL_new'
SslConnection.C:(.text+0x13b7): undefined reference to `SSL_ctrl'
SslConnection.C:(.text+0x13cf): undefined reference to `SSL_ctrl'
SslConnection.C:(.text+0x13e7): undefined reference to `SSL_ctrl'
SslConnection.C:(.text+0x1405): undefined reference to `BIO_new_bio_pair'
SslConnection.C:(.text+0x1419): undefined reference to `SSL_set_bio'
SslConnection.C:(.text+0x17be): undefined reference to `SSL_ctrl'
SslConnection.C:(.text+0x17e4): undefined reference to `ERR_get_error'
SslConnection.C:(.text+0x195d): undefined reference to `SSL_get_ex_data'
SslConnection.C:(.text+0x1970): undefined reference to `SSL_get_ex_data'
SslConnection.C:(.text+0x198e): undefined reference to `SSL_set_ex_data'
SslConnection.C:(.text+0x199a): undefined reference to `BIO_free'
SslConnection.C:(.text+0x19a6): undefined reference to `SSL_free'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `http::server::SslConnection::handleHandshake(boost::system::error_code const&)':
SslConnection.C:(.text+0x2309): undefined reference to `SSL_get_verify_result'
SslConnection.C:(.text+0x24c0): undefined reference to `X509_verify_cert_error_string'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::do_accept(void*, unsigned long)':
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine9do_acceptEPvm[_ZN5boost4asio3ssl6detail6engine9do_acceptEPvm]+0x12): undefined reference to `SSL_accept'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::do_connect(void*, unsigned long)':
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine10do_connectEPvm[_ZN5boost4asio3ssl6detail6engine10do_connectEPvm]+0x4): undefined reference to `SSL_connect'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::do_shutdown(void*, unsigned long)':
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine11do_shutdownEPvm[_ZN5boost4asio3ssl6detail6engine11do_shutdownEPvm]+0x8): undefined reference to `SSL_shutdown'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine11do_shutdownEPvm[_ZN5boost4asio3ssl6detail6engine11do_shutdownEPvm]+0x1d): undefined reference to `SSL_shutdown'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::do_read(void*, unsigned long)':
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine7do_readEPvm[_ZN5boost4asio3ssl6detail6engine7do_readEPvm]+0x14): undefined reference to `SSL_read'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::do_write(void*, unsigned long)':
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine8do_writeEPvm[_ZN5boost4asio3ssl6detail6engine8do_writeEPvm]+0x14): undefined reference to `SSL_write'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::map_error_code(boost::system::error_code&) const':
SslConnection.C:(.text._ZNK5boost4asio3ssl6detail6engine14map_error_codeERNS_6system10error_codeE[_ZNK5boost4asio3ssl6detail6engine14map_error_codeERNS_6system10error_codeE]+0x7e): undefined reference to `BIO_ctrl'
SslConnection.C:(.text._ZNK5boost4asio3ssl6detail6engine14map_error_codeERNS_6system10error_codeE[_ZNK5boost4asio3ssl6detail6engine14map_error_codeERNS_6system10error_codeE]+0x95): undefined reference to `SSL_get_shutdown'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::engine::perform(int (boost::asio::ssl::detail::engine::*)(void*, unsigned long), void*, unsigned long, boost::system::error_code&, unsigned long*)':
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm[_ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm]+0x27): undefined reference to `BIO_ctrl_pending'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm[_ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm]+0x57): undefined reference to `SSL_get_error'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm[_ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm]+0x5e): undefined reference to `ERR_get_error'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm[_ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm]+0x6a): undefined reference to `BIO_ctrl_pending'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm[_ZN5boost4asio3ssl6detail6engine7performEMS3_FiPvmES4_mRNS_6system10error_codeEPm]+0xb4): undefined reference to `SSL_get_shutdown'
/usr/local/lib/libwthttp.a(SslConnection.C.o): In function `boost::asio::ssl::detail::stream_core::~stream_core()':
SslConnection.C:(.text._ZN5boost4asio3ssl6detail11stream_coreD2Ev[_ZN5boost4asio3ssl6detail11stream_coreD5Ev]+0x156): undefined reference to `SSL_get_ex_data'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail11stream_coreD2Ev[_ZN5boost4asio3ssl6detail11stream_coreD5Ev]+0x165): undefined reference to `SSL_get_ex_data'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail11stream_coreD2Ev[_ZN5boost4asio3ssl6detail11stream_coreD5Ev]+0x17f): undefined reference to `SSL_set_ex_data'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail11stream_coreD2Ev[_ZN5boost4asio3ssl6detail11stream_coreD5Ev]+0x188): undefined reference to `BIO_free'
SslConnection.C:(.text._ZN5boost4asio3ssl6detail11stream_coreD2Ev[_ZN5boost4asio3ssl6detail11stream_coreD5Ev]+0x190): undefined reference to `SSL_free'
/usr/local/lib/libwthttp.a(Reply.C.o): In function `http::server::Reply::reset(Wt::EntryPoint const*)':
Reply.C:(.text+0x198): undefined reference to `deflateEnd'
/usr/local/lib/libwthttp.a(Reply.C.o): In function `http::server::Reply::initGzip()':
Reply.C:(.text+0x1003): undefined reference to `deflateInit2_'
/usr/local/lib/libwthttp.a(Reply.C.o): In function `http::server::Reply::~Reply()':
Reply.C:(.text+0x1a78): undefined reference to `deflateEnd'
/usr/local/lib/libwthttp.a(Reply.C.o): In function `http::server::Reply::encodeNextContentBuffer(std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >&, int&, int&)':
Reply.C:(.text+0x1f72): undefined reference to `deflate'
Reply.C:(.text+0x211c): undefined reference to `deflateEnd'
/usr/local/lib/libwthttp.a(HTTPRequest.C.o): In function `http::server::HTTPRequest::headers() const':
HTTPRequest.C:(.text+0x1333): undefined reference to `Wt::Http::Message::Header::Header(std::string const&, std::string const&)'
HTTPRequest.C:(.text+0x1350): undefined reference to `Wt::Http::Message::Header::Header(Wt::Http::Message::Header const&)'
/usr/local/lib/libwthttp.a(HTTPRequest.C.o): In function `void std::vector<Wt::Http::Message::Header, std::allocator<Wt::Http::Message::Header> >::_M_realloc_insert<Wt::Http::Message::Header>(_gnu_cxx::_normal_iterator<Wt::Http::Message::Header*, std::vector<Wt::Http::Message::Header, std::allocator<Wt::Http::Message::Header> > >, Wt::Http::Message::Header&&)':
HTTPRequest.C:(.text._ZNSt6vectorIN2Wt4Http7Message6HeaderESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_[_ZNSt6vectorIN2Wt4Http7Message6HeaderESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_]+0x78): undefined reference to `Wt::Http::Message::Header::Header(Wt::Http::Message::Header const&)'
HTTPRequest.C:(.text._ZNSt6vectorIN2Wt4Http7Message6HeaderESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_[_ZNSt6vectorIN2Wt4Http7Message6HeaderESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_]+0x9f): undefined reference to `Wt::Http::Message::Header::Header(Wt::Http::Message::Header const&)'
HTTPRequest.C:(.text._ZNSt6vectorIN2Wt4Http7Message6HeaderESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_[_ZNSt6vectorIN2Wt4Http7Message6HeaderESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_]+0xd4): undefined reference to `Wt::Http::Message::Header::Header(Wt::Http::Message::Header const&)'
/usr/local/lib/libwthttp.a(ProxyReply.C.o): In function `http::server::ProxyReply::appendSSLInfo(Wt::WSslInfo const*, std::ostream&)':
ProxyReply.C:(.text+0x36b5): undefined reference to `Wt::Json::serialize(Wt::Json::Object const&, int)'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o): In function `Wt::Dbo::backend::Sqlite3::~Sqlite3()':
Sqlite3.C:(.text+0xa0): undefined reference to `Wt::Dbo::SqlConnection::clearStatementCache()'
Sqlite3.C:(.text+0xc8): undefined reference to `Wt::Dbo::SqlConnection::~SqlConnection()'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o): In function `Wt::Dbo::backend::Sqlite3::Sqlite3(std::string const&)':
Sqlite3.C:(.text+0x55f): undefined reference to `Wt::Dbo::SqlConnection::SqlConnection()'
Sqlite3.C:(.text+0x636): undefined reference to `Wt::Dbo::SqlConnection::~SqlConnection()'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o): In function `Wt::Dbo::backend::Sqlite3::Sqlite3(Wt::Dbo::backend::Sqlite3 const&)':
Sqlite3.C:(.text+0x69f): undefined reference to `Wt::Dbo::SqlConnection::SqlConnection(Wt::Dbo::SqlConnection const&)'
Sqlite3.C:(.text+0x77e): undefined reference to `Wt::Dbo::SqlConnection::~SqlConnection()'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o): In function `Wt::Dbo::backend::Sqlite3Statement::execute()':
Sqlite3.C:(.text._ZN2Wt3Dbo7backend16Sqlite3Statement7executeEv[_ZN2Wt3Dbo7backend16Sqlite3Statement7executeEv]+0x10): undefined reference to `Wt::Dbo::SqlConnection::showQueries() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTIN2Wt3Dbo7backend7Sqlite3E[_ZTIN2Wt3Dbo7backend7Sqlite3E]+0x10): undefined reference to `typeinfo for Wt::Dbo::SqlConnection'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0x28): undefined reference to `Wt::Dbo::SqlConnection::executeSql(std::string const&)'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0x30): undefined reference to `Wt::Dbo::SqlConnection::executeSqlStateful(std::string const&)'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0x50): undefined reference to `Wt::Dbo::SqlConnection::getStatement(std::string const&) const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0x58): undefined reference to `Wt::Dbo::SqlConnection::saveStatement(std::string const&, std::unique_ptr<Wt::Dbo::SqlStatement, std::default_delete<Wt::Dbo::SqlStatement> >)'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0x88): undefined reference to `Wt::Dbo::SqlConnection::autoincrementInsertInfix(std::string const&) const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0x98): undefined reference to `Wt::Dbo::SqlConnection::prepareForDropTables()'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xb0): undefined reference to `Wt::Dbo::SqlConnection::textType(int) const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xb8): undefined reference to `Wt::Dbo::SqlConnection::longLongType() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xc0): undefined reference to `Wt::Dbo::SqlConnection::booleanType() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xc8): undefined reference to `Wt::Dbo::SqlConnection::supportUpdateCascade() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xd0): undefined reference to `Wt::Dbo::SqlConnection::requireSubqueryAlias() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xd8): undefined reference to `Wt::Dbo::SqlConnection::limitQueryMethod() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xe0): undefined reference to `Wt::Dbo::SqlConnection::usesRowsFromTo() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xe8): undefined reference to `Wt::Dbo::SqlConnection::supportAlterTable() const'
/usr/local/lib/libwtdbosqlite3.a(Sqlite3.C.o):(.rodata._ZTVN2Wt3Dbo7backend7Sqlite3E[_ZTVN2Wt3Dbo7backend7Sqlite3E]+0xf8): undefined reference to `Wt::Dbo::SqlConnection::alterTableConstraintString() const'
/usr/local/lib/libwtdbosqlite3.a(sqlite3.c.o): In function `unixDlError':
sqlite3.c:(.text+0x1e101): undefined reference to `dlerror'
/usr/local/lib/libwtdbosqlite3.a(sqlite3.c.o): In function `unixDlClose':
sqlite3.c:(.text+0x5654): undefined reference to `dlclose'
/usr/local/lib/libwtdbosqlite3.a(sqlite3.c.o): In function `unixDlSym':
sqlite3.c:(.text+0x5667): undefined reference to `dlsym'
/usr/local/lib/libwtdbosqlite3.a(sqlite3.c.o): In function `unixDlOpen':
sqlite3.c:(.text+0x5679): undefined reference to `dlopen'
/usr/local/lib/libwt.a(WEnvironment.C.o): In function `Wt::WEnvironment::parseSSLInfo(std::string const&)':
WEnvironment.C:(.text+0x2750): undefined reference to `X509_free'
/usr/local/lib/libwt.a(SslUtils.C.o): In function `Wt::Ssl::exportToPem(x509_st*)':
SslUtils.C:(.text+0x63): undefined reference to `BIO_s_mem'
SslUtils.C:(.text+0x6b): undefined reference to `BIO_new'
SslUtils.C:(.text+0x79): undefined reference to `PEM_write_bio_X509'
SslUtils.C:(.text+0x91): undefined reference to `BIO_ctrl'
SslUtils.C:(.text+0x104): undefined reference to `BIO_free_all'
/usr/local/lib/libwt.a(SslUtils.C.o): In function `Wt::Ssl::readFromPem(std::string const&)':
SslUtils.C:(.text+0x1fa): undefined reference to `BIO_s_mem'
SslUtils.C:(.text+0x202): undefined reference to `BIO_new'
SslUtils.C:(.text+0x211): undefined reference to `BIO_puts'
SslUtils.C:(.text+0x21f): undefined reference to `PEM_read_bio_X509'
SslUtils.C:(.text+0x22a): undefined reference to `BIO_free_all'
/usr/local/lib/libwt.a(SslUtils.C.o): In function `Wt::Ssl::getDnAttributes(X509_name_st*)':
SslUtils.C:(.text+0x278): undefined reference to `X509_NAME_entry_count'
SslUtils.C:(.text+0x296): undefined reference to `X509_NAME_get_entry'
SslUtils.C:(.text+0x2a1): undefined reference to `X509_NAME_ENTRY_get_object'
SslUtils.C:(.text+0x2ac): undefined reference to `X509_NAME_ENTRY_get_data'
SslUtils.C:(.text+0x2b7): undefined reference to `OBJ_obj2nid'
SslUtils.C:(.text+0x2d0): undefined reference to `ASN1_STRING_to_UTF8'
SslUtils.C:(.text+0x2f7): undefined reference to `CRYPTO_free'
/usr/local/lib/libwt.a(SslUtils.C.o): In function `Wt::Ssl::x509ToWSslCertificate(x509_st*)':
SslUtils.C:(.text+0x7c2): undefined reference to `X509_get_subject_name'
SslUtils.C:(.text+0x7d7): undefined reference to `X509_get_issuer_name'
/usr/local/lib/libwthttp.a(Request.C.o): In function `http::server::Request::sslInfo() const':
Request.C:(.text+0xf98): undefined reference to `SSL_get_peer_certificate'
Request.C:(.text+0xfb9): undefined reference to `X509_free'
Request.C:(.text+0xfe5): undefined reference to `SSL_get_peer_cert_chain'
Request.C:(.text+0x1014): undefined reference to `sk_num'
Request.C:(.text+0x1026): undefined reference to `sk_value'
Request.C:(.text+0x12a1): undefined reference to `SSL_get_verify_result'
Request.C:(.text+0x14c4): undefined reference to `X509_verify_cert_error_string'
/usr/local/lib/libwthttp.a(RequestParser.C.o): In function `http::server::RequestParser::reset()':
RequestParser.C:(.text+0x19b): undefined reference to `inflateEnd'
/usr/local/lib/libwthttp.a(RequestParser.C.o): In function `http::server::RequestParser::initInflate()':
RequestParser.C:(.text+0x222): undefined reference to `inflateInit2_'
/usr/local/lib/libwthttp.a(RequestParser.C.o): In function `http::server::RequestParser::inflate(unsigned char*, unsigned long, unsigned char*, bool&)':
RequestParser.C:(.text+0x934): undefined reference to `inflate'
/usr/local/lib/libwthttp.a(RequestParser.C.o): In function `http::server::RequestParser::~RequestParser()':
RequestParser.C:(.text+0x135): undefined reference to `inflateEnd'
/usr/local/lib/libwthttp.a(WtReply.C.o): In function `http::server::WtReply::~WtReply()':
WtReply.C:(.text+0x3f8): undefined reference to `deflateEnd'
/usr/local/lib/libwthttp.a(WtReply.C.o): In function `http::server::WtReply::initDeflate()':
WtReply.C:(.text+0x730): undefined reference to `deflateInit2_'
/usr/local/lib/libwthttp.a(WtReply.C.o): In function `http::server::WtReply::deflate(unsigned char const*, unsigned long, unsigned char*, bool&)':
WtReply.C:(.text+0x7a2): undefined reference to `deflate'
/usr/local/lib/libwthttp.a(WtReply.C.o): In function `http::server::WtReply::formatResponse(std::vector<boost::asio::const_buffer, std::allocator<boost::asio::const_buffer> >&)':
WtReply.C:(.text+0x25a0): undefined reference to `deflateReset'
/usr/local/lib/libwthttp.a(WtReply.C.o): In function `http::server::WtReply::reset(Wt::EntryPoint const*)':
WtReply.C:(.text+0x4564): undefined reference to `deflateReset'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `PngReadFunc':
(.text+0x2d): undefined reference to `png_get_io_ptr'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `PngErrorFunc':
(.text+0x8c): undefined reference to `png_get_error_ptr'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `CreatePallet':
(.text+0xed): undefined reference to `png_get_PLTE'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x261): undefined reference to `png_create_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x277): undefined reference to `png_create_info_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x290): undefined reference to `png_set_sig_bytes'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x2a2): undefined reference to `png_set_read_fn'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x2b1): undefined reference to `png_read_info'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x2cc): undefined reference to `png_destroy_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x30d): undefined reference to `png_destroy_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x34a): undefined reference to `png_get_IHDR'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x368): undefined reference to `png_read_update_info'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x43d): undefined reference to `png_destroy_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x4a0): undefined reference to `png_get_valid'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x58b): undefined reference to `png_get_image_height'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x59a): undefined reference to `png_get_image_width'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x5a9): undefined reference to `png_get_color_type'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x5e5): undefined reference to `png_get_rowbytes'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x6d2): undefined reference to `png_destroy_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x6e6): undefined reference to `png_set_strip_16'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x72b): undefined reference to `png_destroy_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x743): undefined reference to `png_get_interlace_type'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x760): undefined reference to `png_get_rowbytes'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x76e): undefined reference to `png_get_image_height'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x85a): undefined reference to `png_get_tRNS'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x94d): undefined reference to `png_get_image_height'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x95f): undefined reference to `png_get_image_width'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0x987): undefined reference to `png_get_rowbytes'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xa21): undefined reference to `png_get_rowbytes'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xa32): undefined reference to `png_get_image_height'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xa8c): undefined reference to `png_read_rows'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xab4): undefined reference to `png_read_image'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xb1d): undefined reference to `png_read_image'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xbb9): undefined reference to `png_destroy_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xc34): undefined reference to `png_destroy_read_struct'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xc46): undefined reference to `png_read_image'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xca9): undefined reference to `png_read_image'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xcb9): undefined reference to `png_read_image'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `LoadPngData':
(.text+0xd5c): undefined reference to `png_read_image'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `PngBeforeWrite':
(.text+0x1085): undefined reference to `png_sig_cmp'
/usr/lib/libhpdf.a(hpdf_image_png.o): In function `HPDF_Image_LoadPngImage':
(.text+0x1149): undefined reference to `png_sig_cmp'
/usr/lib/libhpdf.a(hpdf_streams.o): In function `HPDF_Stream_WriteToStreamWithDeflate':
(.text+0xcf3): undefined reference to `deflateInit_'
/usr/lib/libhpdf.a(hpdf_streams.o): In function `HPDF_Stream_WriteToStreamWithDeflate':
(.text+0xd72): undefined reference to `deflate'
/usr/lib/libhpdf.a(hpdf_streams.o): In function `HPDF_Stream_WriteToStreamWithDeflate':
(.text+0xdd2): undefined reference to `deflate'
/usr/lib/libhpdf.a(hpdf_streams.o): In function `HPDF_Stream_WriteToStreamWithDeflate':
(.text+0xdeb): undefined reference to `deflateEnd'
/usr/lib/libhpdf.a(hpdf_streams.o): In function `HPDF_Stream_WriteToStreamWithDeflate':
(.text+0xe3f): undefined reference to `deflateEnd'
/usr/lib/libhpdf.a(hpdf_streams.o): In function `HPDF_Stream_WriteToStreamWithDeflate':
(.text+0xf35): undefined reference to `deflateEnd'
/usr/lib/libhpdf.a(hpdf_streams.o): In function `HPDF_Stream_WriteToStreamWithDeflate':
(.text+0xf8d): undefined reference to `deflateEnd'
collect2: error: ld returned 1 exit status
make1: *** [MyWittyApp.mk:81: ReleaseS/MyWittyApp] Error 1

RE: Static Wt Linking - Added by Wim Dumon about 1 month ago

Quoting Koen's answer:

Static linking has the annoyance that you need to explicitly link to all dependent libraries as well, thus you need to specify all of them (but all of them can be either static or dynamic).

In your error messages I see methods that are from libpng, libz, openssl, wtdbo, pango, ...

Be prepared to see new function names popping up as you add extra libraries to link command (for their dependencies), and the order in which you write them on your link command may also matter.

BR,
Wim.

RE: Static Wt Linking - Added by Claudio White about 1 month ago

Thank you:-)

I did add the dynamic libs too but the linker cannot find the libs because for me it seems it is searching always the static version only.

For e.g. Pango-Support i do have currently the dynamic libs only (usr/lib/libpango-1.0.so symlink to libpango-1.0.so.0.4000.4) and did add it to the linkers commandline tried with -lpango or with -lpango-1.0 and in both cases the linker says "cannot find the lib ...".

I guess using static version of all libs is indispensable.

Is there - maybe - any tool which can help to find out which depending static libs i do need?

RE: Static Wt Linking - Added by Claudio White about 1 month ago

...sorry...small mistake in typing... pango is not in /usr/lib but in /usr/lib64.

RE: Static Wt Linking - Added by Claudio White about 1 month ago

Could these tool helpful? It creates portable apps (open source): http://statifier.sourceforge.net/
Has anyone used it?

RE: Static Wt Linking - Added by Claudio White about 1 month ago

I did use the trial from ermine and it works...it load all shared libs into one new executable and i did start this new executable within a docker alpine container and my witty app coming up running:-)

But...wondering, when i use the login or the register user (auth / dbauth sqlite3) does not work, i get an error: "Wt internal error; code: undefined, description: c.size is not a function"
Deleting the auth.db and automaticly recreating at startup does not help, the same error is coming up.

RE: Static Wt Linking - Added by Claudio White about 1 month ago

I guess i did found the problem in the logfile:

[info] "Mail.Client: Smtp::Client: using 'localhost' (from smtp-self-host property) as self host"
[info] "Mail.Client: Smtp::Client: using 'localhost:25' (from smtp-host and smtp-port properties) as SMTP host"
[info] "Mail.Client: Smtp::Client: connecting to 'localhost:25"
[error] "Wt: error during event handling: resolve: Host not found (authoritative)"
[error] "Wt: fatal error: resolve: Host not found (authoritative)"

RE: Static Wt Linking - Added by Claudio White about 1 month ago

The first login problem i did found too, it was not possible to load a png (the png is still there but i guess the libs not included because the png is only in the messages.xml but not in the library list creating the witty app - there must be something in the code which uses the png library that ermine can add the library to the static executable).

But hey....now it works:-)

- Create a Witty-App
- Make a one executable including all dependencies using ermine (statifier i did not try at the moment)
- Put in into a small Docker Alpine-Linux-Image (5MB)
- Run this Docker-Container and access from browser on your host or from remote if your machine is reachable from remote:-)

RE: Static Wt Linking - Added by lm at about 1 month ago

I've been curious why you've been wanting to link statically. From your last image, it's because you're wanting to put your application on Alpine which doesn't have Wt? (I just looked and it appears they do have it: https://pkgs.alpinelinux.org/package/edge/community/x86/wt.)

Anyway, I thought I would mention docker multi-stage builds, too. I deploy to a docker container (but not Alpine; I use arch linux), too, and I've had good luck with a multi-stage approach. Something like:

1   from archlinux/base as build-image
2   run pacman -Syu --noconfirm boost websocketpp freetype2 gcc git cmake make wget tar fakeroot .......
3   run run mkdir /aur && cd /aur & wget 'https://aur.archlinux.org/cgit/aur.git/snapshot/pngwriter-git.tar.gz && tar xzf pnggwriter-git.tar.gz ....
4   run git clone --depth 2 -b javascript-module https://github.com/limitedAtonement/wt /wt
5   run mkdir /wt/build
6   workdir /wt/build
7   run cmake -DCONNECTOR_FCGI=OFF .. && make -j 8 && make install
8   copy . /my-wt-app
9   workdir /speedlines
10  run ./mk
11  
12  from archlinux/base
13  run pacman -Syu --noconfirm boost websocketpp ........
14  copy --from=build-image /aur/pngwriter-git/pngwriter-git*.pkg.tar.xz /pngwriten.pkg.tar.xz
15  run pacman -U --noconfirm /pngwriter.pkg.tar.xz
16  copy --from=build-image /usr/local/ /usr/local
17  copy --from=build-image /my-wt-app/dist /my-wt-app
I cut out some details and added line numbers; feel free to ask if anything looks unclear. I (1) start from arch linux, (2) set up the system with some prereqs, (3) build an AUR package, (4) get my customized version of WT to support javascript modules, (5-7) build WT, (8) put my application's source into the build image, (9-10) build my application.

After that, (12) I create a new image from arch linux (so far, this has nothing to do with the first image). (13) set up fresh dependencies (if this line is the same as line 2, docker can use a cache!). lines 14, 16, and 17 are where I grab artifacts from the first image and put them into this final image. (15) installs the AUR package build earlier.

RE: Static Wt Linking - Added by Claudio White about 1 month ago

Thank you! Sounds good:-) I will try it next days...

(1-12/12)