简短问题:
llvm-ld
如何找到libstdc++
?
详情:
我收到以下错误消息:
llvm-ld: error: Cannot find library 'stdc++'
llvm-ld
时。我想了解llvm-ld
如何搜索libstdc++
。
我正在设置一个新系统,并遵循在不同系统上运行的编译步骤。最后我注意到在我的LD_LIBRARY_PATH
中在旧系统上设置的.bashrc
存在差异,其中包括大量目录,包括Cadence和其他各种软件。我不想使用LD_LIBRARY_PATH
,我希望能够通过向libstdc++
提供适当的命令行参数来链接llvm-ld
。
我正在运行的命令是:
llvm-ld -disable-internalize -native -o foo foo.bc4 -L/usr/lib/x86_64-linux-gnu -lpthread -lrt -lstdc++ -lm -v
导致以下输出:
Linking bitcode file 'foo.bc4'
Linked in file 'foo.bc4'
Linking archive file '/usr/lib/x86_64-linux-gnu/libpthread.a'
Linking archive file '/usr/lib/x86_64-linux-gnu/librt.a'
llvm-ld: error: Cannot find library 'stdc++'
但是,运行ls -l /usr/lib/x86_64-linux-gnu/libstdc++*
会导致:
lrwxrwxrwx 1 root root 19 Apr 15 16:34 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.16
-rw-r--r-- 1 root root 962656 Apr 15 16:36 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
所以我不明白为什么llvm-ld
找不到这个文件?特别是当我使用LD_LIBRARY_PATH
集合进行编译然后在生成的可执行文件上运行ldd
时,我得到以下输出:
linux-vdso.so.1 => (0x00007ffff7ffe000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffff7dc1000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ffff7ac0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffff77c6000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ffff75b0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff71f0000)
/lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
这似乎表明我想要的libstdc++
版本是/usr/lib/x86_64-linux-gnu/libstdc++.so.6
,但我无法弄清楚为什么llvm-ld
没有找到搜索路径-L/usr/lib/x86_64-linux-gnu
}。
供参考:uname -a
会产生:Linux FOO 3.2.0-30-generic #48-Ubuntu SMP Fri Aug 24 16:52:48 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
llvm-ld --version
:
LLVM (http://llvm.org/):
LLVM version 3.1svn
Optimized build.
Built Sep 14 2012 (13:22:38).
Default target: x86_64-unknown-linux-gnu
Host CPU: core2
答案 0 :(得分:2)
llvm-ld
看起来不是.so.#
。根据{{1}}页面:
在查找使用
man
选项指定的库时,-l
首先尝试从当前目录加载具有该名称的文件。如果失败,它会在添加到库中的每个目录中按顺序查找llvm-ld
,liblibrary.bc
或liblibrary.a
。liblibrary
使用-L选项搜索路径。将按照指定的顺序搜索这些目录。如果图书馆不能 找到,shared library extension
查找llvm-ld
环境变量指定的目录。如果它没有在那里找到一个库,它就会失败。
您可以通过创建符号链接LLVM_LIB_SEARCH_PATH
- >来完成此工作。 /usr/lib/x86_64-linux-gnu/libstdc++.so
。
我通常直接与libstdc++.so.6
链接,因为它更了解搜索C ++库的内容。