Hi John,

On 2021-07-27 03:03, John Lumby wrote:
On my linux system,  (kernel is 5.10.46) , with openssl 1.1.1j built in its own 
directory at /opt/openssl,
I run
./configure --disable-hardening --build-libxml2 --disable-pulse 
--build-headless --enable-vnc --with-iasl=/usr/local/bin/iasl 
--with-openssl-dir=/opt/openssl --disable-vmmraw --disable-java --disable-qt 
--disable-docs

which fails with a zillion
  /usr/local/bin/ld: ssl_init.c:(.text+0x4d): undefined reference to `xxx'

because configure has a line

LIBCRYPTO="${OPENSSLDIR}/lib/libcrypto.a ${OPENSSLDIR}/lib/libssl.a"

with the libs in the wrong order for what ld linker requires : libssl.a has 
references to external symbols in
libcrypto.a .

the line should read
either
LIBCRYPTO="${OPENSSLDIR}/lib/libssl.a ${OPENSSLDIR}/lib/libcrypto.a -lpthread -ldl 
-lm"
or
LIBCRYPTO="${OPENSSLDIR}/lib/libssl.so ${OPENSSLDIR}/lib/libcrypto.so"

configure runs without error if either --with-openssl-dir= is omitted (assuming 
that package is in a standard location) or if --build-libssl is specified.

It is unusual for a package to deliberately choose to link to static libs 
rather than dynamic-shared libs so I assume there was some reason for it,   so 
I don't know what other considerations there may be or  what the best 
correction is.

Taking a deep breath... yes, there is a reason. VirtualBox's configure script is currently prepared to handle 3 cases for the openssl library.

1. Use the system openssl. Very easy, because it should be detected automatically, without needing any special options to configure. It is the best solution if you want to be able to update openssl without also updating VirtualBox.

2. Point to a specific static openssl. Needs to be static because that minimizes the effort for distribution (including a dynamic library in the VirtualBox package is really not better than linking statically).

3. Tell the VirtualBox build system to compile the included openssl library (see directory name src/libs/openssl* which version it currently is). Also linked statically, for the same reason as 2.

Your approach seems to be halfway between 1. and 2., which no one needed so far and it shouldn't replace any of the known working cases anyway, so your diff would likely need to be more complicated.

However, you are right that case 2. was never really tested thoroughly on Linux, so I just made the necessary adjustments. They will be in the source for 6.1.28.

Hope this makes the logic somewhat clear...

BTW, openssl is at version 1.1.1k currently (we learned the hard way, too, because we watch for new versions but their changelog page until today doesn't have a proper release date for 1.1.1k - still says "[xx XXX xxxx]"), which is in 6.1.26.

Klaus

Cheers,   John Lumby
_______________________________________________
vbox-dev mailing list
vbox-dev@virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev

Reply via email to