*** Introduction ***
OpenWrt compiles U-Boot with some host tools like mkimage.
*** Problem ***
HOSTLD tools/mkimage
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld:
/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/lib/libssl.a(ssl_init.o):
in function `OPENSSL_init_ssl':
ssl_init.c:(.text+0x59): undefined reference to `pthread_once'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld:
/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/lib/libcrypto.a(libcrypto_la-crypto_init.o):
in function `OPENSSL_init_crypto':
crypto_init.c:(.text+0x51): undefined reference to `pthread_once'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld:
/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/lib/libcrypto.a(libcrypto_la-conf_sap.o):
in function `OpenSSL_config':
conf_sap.c:(.text+0xbc): undefined reference to `pthread_once'
It seems that OpenWrt wants to compile mkimage with statically linked
LibreSSL.
LibreSSL seems to be compiled OK:
$ grep Libs staging_dir/host/lib/pkgconfig/libcrypto.pc
Libs: -L${libdir} -lcrypto
Libs.private: -lresolv -lpthread
Related:
9bfca308268e ("uboot-mvebu: Fix build with libressl 2.7.2")
*** Manual pkg-config test ***
I'm not sure if I test it correctly but output looks OK:
$ PATH=/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/bin:$PATH
./staging_dir/host/bin/pkg-config --libs libssl libcrypto
-L/lib64 -lssl -lcrypto
$ PATH=/home/rmilecki/openwrt/openwrt-master-bcm4908/staging_dir/host/bin:$PATH
./staging_dir/host/bin/pkg-config --static --libs libssl libcrypto
-L/lib64 -lssl -lresolv -lpthread -lcrypto -L/lib64 -lresolv -lpthread -lcrypto
-lresolv -lpthread
*** U-Boot code ***
In tools/Makefile it uses:
HOSTLOADLIBES_mkimage += \
$(shell pkg-config --libs libssl libcrypto 2> /dev/null || echo "-lssl
-lcrypto")
Above works for most cases. Adding -pthread was rejected, see:
[U-Boot] [PATCH] Add -pthread to HOSTLOADLIBES_mkimage
https://patchwork.ozlabs.org/project/uboot/patch/[email protected]/
I guess OpenWrt is special case with static linking.
First of all I'm not sure if that pkg-config shouldn't use --static. I
have no idea how to tell U-Boot we want mkimage built static.
Secondly for some reason pkg-config doesn't seem to work from U-Boot
build context. After dropping "2> /dev/null" I can see:
Package libssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libssl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libssl', required by 'virtual:world', not found
Package 'libcrypto', required by 'virtual:world', not found
Package libssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libssl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libssl', required by 'virtual:world', not found
Package 'libcrypto', required by 'virtual:world', not found
Package libssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libssl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libssl', required by 'virtual:world', not found
Package 'libcrypto', required by 'virtual:world', not found
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel