首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定位libstdc++?

如何定位libstdc++?
EN

Stack Overflow用户
提问于 2012-10-05 23:07:44
回答 1查看 1.7K关注 0票数 2

简短问题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

我正在运行的命令是:

代码语言:javascript
复制
llvm-ld -disable-internalize -native -o foo foo.bc4 -L/usr/lib/x86_64-linux-gnu -lpthread -lrt  -lstdc++ -lm -v

这将产生以下结果:

代码语言:javascript
复制
  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++*会导致:

代码语言:javascript
复制
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时,我得到了以下输出:

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-28 20:01:43

看起来llvm-ld并不是在寻找.so.#。根据man页面:

当查找使用-l选项指定的库时,llvm-ld首先尝试从当前目录加载具有该名称的文件。如果失败,它将按照该顺序在添加到库搜索路径的每个目录中使用liblibrary.shared library extension,选项查找liblibrary.bcliblibrary.a或-L。按照指定的顺序搜索这些目录。如果无法找到库,则llvm-ld将查找由LLVM_LIB_SEARCH_PATH环境变量指定的目录。如果它没有在那里找到一个库,它就会失败。

您可以通过创建一个符号链接/usr/lib/x86_64-linux-gnu/libstdc++.so -> libstdc++.so.6来完成这项工作。

我通常直接链接到clang,因为它能更好地理解C++库的搜索。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12755168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档