On 4/24/19 3:42 PM, Richard W.M. Jones wrote:
When testing which “dl library” we must use for dl* symbols,
autoconf
runs a test similar to:
$ cat conftest.c
char dlopen ();
int main () { return dlopen (); }
$ gcc -o conftest $CFLAGS conftest.c [try various -ldl options here]
When using ‘CFLAGS="-fsanitize=address"’ this succeeds even if no dl
libraries are used at all, since it appears that using this option
causes dlopen to be included in the final binary implicitly. This
causes configure to set DL_LIBS='', but unfortunately dlsym is not
included implicitly and so linking fails.
Although I believe this is a bug in GCC 9, as a workaround use dlsym
as the sentinel function instead.
Not just gcc 9; I reproduced it on gcc 8 in Fedora 29. But I agree that
it is odd that the use of -fsanitize=address is sufficient to pull in a
subset of symbols that you normally only get from the explicit library
link line. At any rate,
The new output from ‘./configure CFLAGS="-fsanitize=address"’ is:
checking for library containing dlsym... -ldl
[...]
checking for dladdr... yes
See also:
https://bugzilla.redhat.com/show_bug.cgi?id=1702761
---
configure.ac | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
this change looks correct. ACK.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization:
qemu.org |
libvirt.org