@H_502_1@dlopen位于libdl.a但是当我将我的应用程序与libdl.a链接时,gcc链接器抛出此错误:在dlopen中调用__dlopen的unknow引用
@H_502_1@我应该导入另一个.a?
最佳答案
当我尝试静态编译一个dlopen模型程序时,gcc(Archlinux / gcc版本4.6.1 20110819(预发布))告诉我:
@H_502_1@
$gcc test.c -ldl -static
/tmp/ccsWe4RN.o: In function `main': test.c:(.text+0x13):
warning: Using 'dlopen' in statically linked applications requires
at runtime the shared libraries from the glibc version used for linking
@H_502_1@事实上,当我在/usr/lib /中运行此脚本时
@H_502_1@
for i in *.a;
do
echo $i;
readelf -a $i | grep __dlopen;
done
@H_502_1@我看见:
@H_502_1@
libc.a
16: 0000000000000080 69 FUNC GLOBAL DEFAULT 1 __dlopen
000000000000 002300000001 R_X86_64_64 0000000000000000 __dlopen + 0
35: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND __dlopen
@H_502_1@所以根据第一行,libc.a确实定义了你缺少的符号.
@H_502_1@在我的系统中,gcc test.c -ldl -static足以使应用程序运行,但是
@H_502_1@
gcc
@H_502_1@应该解决你的系统中的问题.