dlopen
函数位于 libdl.a
中,但是当我将我的应用程序与 libdl.a
进行链接时,gcc 链接器会抛出此错误:在 dlopen 中调用了未知引用 __dlopen
我应该导入另一个 .a
文件吗?
dlopen
函数位于 libdl.a
中,但是当我将我的应用程序与 libdl.a
进行链接时,gcc 链接器会抛出此错误:在 dlopen 中调用了未知引用 __dlopen
我应该导入另一个 .a
文件吗?
当我尝试静态编译一个 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
这应该可以解决您系统中的问题。
您应该能够使用共享库libdl.so
gcc -ldl ...
dlopen
(在libdl.a
中),但找不到__dlopen
(因此,似乎在其他地方...)。 - phimuemuedlopen
和 __dlopen
似乎都在 libldl.so
中,但在 libldl.a
中没有被 定义(但是存在)(看起来很奇怪!) - Kevin