dlopen位于libdl.a中,但是当我将我的应用程序链接到libdl.a上时,gcc链接器抛出了这个错误:unknow reference to __dlopen called in dlopen
我是否应该导入另一个.a
发布于 2011-09-24 00:45:00
当我尝试静态编译dlopen模型程序时,gcc (Archlinux/gcc版本4.6.1 20110819 (预发行版))告诉我:
$ 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实际上,当我在/usr/lib/中运行这个脚本时
for i in *.a;
do
echo $i;
readelf -a $i | grep __dlopen;
done我看到:
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因此,根据第一行,libc.a确实定义了缺少的符号。
在我的系统中,gcc test.c -ldl -static足以让应用程序运行,但是
gcc <file> -static -ldl -lc应该可以解决系统中的问题。
发布于 2011-09-23 16:37:47
您应该能够将共享库libdl.so与
gcc -ldl ...如果您对使用静态版本没有很强的要求。
https://stackoverflow.com/questions/7526255
复制相似问题