Build 对符号'的未定义引用;dlsym@@GLIBC_2.2.5';

Build 对符号'的未定义引用;dlsym@@GLIBC_2.2.5';,build,linker,qemu,glibc,Build,Linker,Qemu,Glibc,我正在qemu-5.1.0中添加一个代码,该代码应该使用.so文件。 我使用configure--extra-CFLAGS/--extra-cxflags/--extra-LDFLAGS选项将-ldl添加到QEMU\u CFLAGS、QEMU\u cxflags、QEMU\u LDFLAGS中,可以看到它们确实设置好了。 但当我真的做“make”的时候,它给了我这个错误,我不知道是什么错了 LINK aarch64-softmmu/qemu-system-aarch64 /usr/bin/

我正在qemu-5.1.0中添加一个代码,该代码应该使用.so文件。
我使用configure--extra-CFLAGS/--extra-cxflags/--extra-LDFLAGS选项将-ldl添加到QEMU\u CFLAGS、QEMU\u cxflags、QEMU\u LDFLAGS中,可以看到它们确实设置好了。
但当我真的做“make”的时候,它给了我这个错误,我不知道是什么错了

LINK    aarch64-softmmu/qemu-system-aarch64
/usr/bin/ld: ../hw/misc/axpu_if.o: undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:219: qemu-system-aarch64] Error 1
make: *** [Makefile:527: aarch64-softmmu/all] Error 2
下面是“ldd--version”命令输出。我的系统的glibc版本似乎是2.31(ubuntu 20.04),但我不知道为什么它要从glibc_2.2.5中寻找符号dlsym

ckim@ckim-ubuntu:~/xxx/qemu-5.1.0/build$ ldd --version
ldd (Ubuntu GLIBC 2.31-0ubuntu9.2) 2.31
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
<> P>我发现,“-LDL”链接选项被忽略了,因为在最后的C++链接命令中,在SUP中放置得太早了。所以,如果您想使用external.So文件,并且需要使用libdl.So,那么应该像这样配置qemu。(在qemu-5.1.0/build目录下)

../configure--target list=aarch64 softmmu--enable debug--enable gtk --额外的ldflags=“-Wl,--no根据需要,-ldl”


添加了
-Wl,-no-as-needed,-ldl
部分。(其他的是我需要的)-“按需”是默认设置,它在elf文件中列出了所需的库。我只是用-ldl测试了它,但它不起作用,因此最后一个命令。

Library
-ldl
应该传递给链接器。没错,由于上次在
ld
中进行了更改,Library
-ldl
必须添加到
ldlibs
而不是
ldflags