dlopen
位于libdl.a
但是当我将我的应用程序与libdl.a
相关联时,gcc链接器会抛出此错误:unknow reference to __dlopen called in dlopen
我应该导入另一个.a
吗?
答案 0 :(得分:8)
当我尝试静态编译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
应解决系统中的问题。
答案 1 :(得分:3)
您应该可以将共享库libdl.so
与
gcc -ldl ...
如果您对使用静态版本没有强烈要求。