【发布时间】:2019-06-03 23:21:20
【问题描述】:
我在构建可执行文件时在命令行上链接了一个共享库。在该可执行文件上运行 ldd 不会显示链接的共享库。
查看链接器的一些输出后,我什至尝试添加-Wl,--no-as-needed 选项,但这也无济于事。
foo.c:
#include <stdio.h>
void foo () {
printf ("Hello world\n");
}
main.c:
#include <stdio.h>
int main () {
printf ("In main \n");
foo ();
}
这是我用来编译和链接的命令:
$ gcc -Wl,--no-as-needed main.c -o main -L./ -lfoo
/bin/ld: cannot find -lfoo
collect2: error: ld returned 1 exit status
$ gcc -c foo.c -shared -Wl,-soname,libfoo.so -o libfoo.so
$ ls -l libfoo.so
-rw-r--r-- 1 apple eng 1488 Jun 4 04:44 libfoo.so
$ gcc -Wl,--no-as-needed main.c -o main -L./ -lfoo
$ ldd main
linux-vdso.so.1 => (0x00007fffbdd6c000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6367e23000)
/lib64/ld-linux-x86-64.so.2 (0x00005556e268a000)
libfoo.so 没有出现在上面。
$ objdump -x main | grep NEEDED
NEEDED libc.so.6
为什么libfoo.so 不显示为NEEDED?
【问题讨论】:
-
你在什么平台上?
-
gcc的版本?ldd main的退出代码? (运行ldd main; echo $?) -
uname -a Linux myhost-165 3.10.0-693.11.6.el7.x86_64 #1 SMP Thu Dec 28 14:23:39 EST 2017 x86_64 x86_64 x86_64 GNU/Linux
-
ldd main;echo $? linux-vdso.so.1 => (0x00007ffc17f98000) libc.so.6 => /lib64/libc.so.6 (0x00007f00ed6f2000) /lib64/ld-linux-x86-64.so.2 (0x0000560462687000) 0跨度>
-
@Apad 请将这些详细信息添加到您的问题中。这个输出在 cmets 中的格式很糟糕。
标签: shared-libraries ldd