最佳答案
当我尝试静态编译一个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
应该解决你的系统中的问题.