3.5.1 on Ubuntu 16.04.1 i686 refuses to link -ldl when using static OpenSSL
Steps to reproduce:
$ git clone --recursive https://github.com/monero-project/kovri
$ cd kovri/ && git checkout a7f4b24 # current HEAD on master
$ make static
Successful example:
Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64) cmake version 3.5.1 GNU 5.4.0
[100%] Linking CXX executable ../../kovri
cd /home/anonimal/kovri/build/src/app && /usr/bin/cmake -E cmake_link_script CMakeFiles/kovri-app.dir/link.txt --verbose=1
/usr/bin/c++ -std=c++1y -Wall -Wextra -Winvalid-pch -maes -pthread -g -static-libgcc -static-libstdc++ CMakeFiles/kovri-app.dir/main.cc.o CMakeFiles/kovri-app.dir/config.cc.o CMakeFiles/kovri-app.dir/daemon.cc.o CMakeFiles/kovri-app.dir/instance.cc.o CMakeFiles/kovri-app.dir/daemon_linux.cc.o -o ../../kovri -rdynamic ../../libkovri-client.a ../../libkovri-core.a -Wl,-Bstatic -lboost_chrono -lboost_log -lboost_program_options -lboost_date_time -lboost_thread -lboost_system -lboost_filesystem -lboost_regex -lboost_log_setup -lboost_atomic -Wl,-Bdynamic -lpthread -pthread ../../../deps/cpp-netlib/build/libs/network/src/libcppnetlib-client-connections.a -lpthread -Wl,-Bstatic -lssl -lcrypto -Wl,-Bdynamic -ldl ../../../deps/cpp-netlib/build/libs/network/src/libcppnetlib-server-parsers.a ../../../deps/cpp-netlib/build/libs/network/src/libcppnetlib-uri.a -Wl,-Bstatic -lboost_chrono -lboost_date_time -lboost_thread -lboost_system -lboost_atomic -Wl,-Bdynamic -lpthread ../../../deps/cryptopp/build/libcryptopp.a
Problem example:
Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic i686) cmake version 3.5.1 GNU 5.4.0
[100%] Linking CXX executable ../../kovri
cd /home/anonimal/kovri/build/src/app && /usr/bin/cmake -E cmake_link_script CMakeFiles/kovri-app.dir/link.txt --verbose=1
/usr/bin/c++ -std=c++1y -Wall -Wextra -Winvalid-pch -maes -pthread -g -static-libgcc -static-libstdc++ CMakeFiles/kovri-app.dir/main.cc.o CMakeFiles/kovri-app.dir/config.cc.o CMakeFiles/kovri-app.dir/daemon.cc.o CMakeFiles/kovri-app.di
r/instance.cc.o CMakeFiles/kovri-app.dir/daemon_linux.cc.o -o ../../kovri -rdynamic ../../libkovri-client.a ../../libkovri-core.a -Wl,-Bstatic -lboost_chrono -lboost_log -lboost_program_options -lboost_date_time -lboost_thread -lboost_sys
tem -lboost_filesystem -lboost_regex -lboost_log_setup -lboost_atomic -Wl,-Bdynamic -lpthread -pthread /home/anonimal/cpp-netlib/build/libs/network/src/libcppnetlib-client-connections.a -lboost_system -lboost_thread -lboost_chrono -lboost_
date_time -lboost_atomic -lpthread -Wl,-Bstatic -lssl -lcrypto /home/anonimal/cpp-netlib/build/libs/network/src/libcppnetlib-server-parsers.a /home/anonimal/cpp-netlib/build/libs/network/src/libcppnetlib-uri.a -Wl,-Bdynamic -lpthread ../..
/../deps/cryptopp/build/libcryptopp.a
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(fips.o): In function `verify_checksums':
(.text+0x46f): undefined reference to `dlopen'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(fips.o): In function `verify_checksums':
(.text+0x486): undefined reference to `dlsym'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(fips.o): In function `verify_checksums':
(.text+0x49b): undefined reference to `dladdr'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(fips.o): In function `verify_checksums':
(.text+0x4ab): undefined reference to `dlclose'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(fips.o): In function `verify_checksums':
(.text+0x4fa): undefined reference to `dlclose'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
(.text+0xa): undefined reference to `dlopen'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
(.text+0x20): undefined reference to `dlsym'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
(.text+0x2a): undefined reference to `dlclose'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
(.text+0x32d): undefined reference to `dlsym'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
(.text+0x3ad): undefined reference to `dlerror'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':
(.text+0x42d): undefined reference to `dlsym'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':
(.text+0x4ad): undefined reference to `dlerror'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
(.text+0x518): undefined reference to `dlopen'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
(.text+0x575): undefined reference to `dlclose'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
(.text+0x5ae): undefined reference to `dlerror'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
(.text+0x641): undefined reference to `dladdr'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
(.text+0x6a1): undefined reference to `dlerror'
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':
(.text+0x70b): undefined reference to `dlclose'
collect2: error: ld returned 1 exit status
src/app/CMakeFiles/kovri-app.dir/build.make:226: recipe for target 'kovri' failed
make[3]: *** [kovri] Error 1
make[3]: Leaving directory '/home/anonimal/kovri/build'
CMakeFiles/Makefile2:113: recipe for target 'src/app/CMakeFiles/kovri-app.dir/all' failed
make[2]: *** [src/app/CMakeFiles/kovri-app.dir/all] Error 2
make[2]: Leaving directory '/home/anonimal/kovri/build'
Makefile:130: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/home/anonimal/kovri/build'
Makefile:114: recipe for target 'static' failed
make: *** [static] Error 2
Notes:
- This issue is not reproducible on any other of our supported platforms (only i686)
- The area which targets
dl
can also be seen here for easy reference (the complete recipes are available in the submodule)
Perhaps the issue is incorrect implementation on my part?