通过 cmake 链接 libc++ 时 libc++abi 的链接问题

2024-05-09

我正在尝试构建一个简单的(“hello world”)C++使用 LLVM/Clang 3.7.0 的程序,根据工具链的源代码构建libc++,使用命令行:

clang++ -std=c++14 -stdlib=libc++ -fno-exceptions hello.cpp

但是,我收到以下错误:

/usr/bin/ld: warning: libc++abi.so.1, needed by /bulk/workbench/llvm/3.7.0
/toolchain4/bin/../lib/libc++.so, not found (try using -rpath or -rpath-link)
/bulk/workbench/llvm/3.7.0/toolchain4/bin/../lib/libc++.so: undefined reference to `__cxa_rethrow_primary_exception'
/bulk/workbench/llvm/3.7.0/toolchain4/bin/../lib/libc++.so: undefined reference to `__cxa_decrement_exception_refcount'
/bulk/workbench/llvm/3.7.0/toolchain4/bin/../lib/libc++.so: undefined reference to `std::out_of_range::~out_of_range()'
[...]

The LD_LIBRARY_PATH is not设置并将工具链的安装目录添加到我的工作中PATH by:

export PATH=$PATH:/bulk/workbench/llvm/3.7.0/toolchain4/bin/

I'm on Ubuntu GNU/Linux 14.04我还没有从任何存储库安装任何 LLVM 或 Clang 相关的软件包。

根据libc++ 文档 http://libcxx.llvm.org/docs/UsingLibcxx.html#using-libc-on-linux:

在 Linux 上,libc++ 通常只能与“-stdlib=libc++”一起使用。然而,某些 libc++ 安装需要用户自己手动链接 libc++abi。如果您在使用 libc++ 时遇到链接器错误,请尝试将“-lc++abi”添加到链接行。

按照建议进行操作即可成功构建。

所以,我的问题是这样的:

为什么我必须指定-lc++abi明确依赖于构建命令行?

Doing

readelf -d $(llvm-config --libdir)/libc++.so

gives

Dynamic section at offset 0xb68c8 contains 31 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libc++abi.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x000000000000000e (SONAME)             Library soname: [libc++.so.1]
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/../lib]
 0x000000000000000c (INIT)               0x350a8
[...]

嵌入式不应该吗RPATH在 ELF 的动态部分可以考虑为ld如其所述man page http://linux.die.net/man/1/ld在该部分下-rpath-link=dir?

此外,当我设置LD_LIBRARY_PATH with

LD_LIBRARY_PATH=$(llvm-config --libdir)

初始构建命令(不指定-lc++abi) 有效,正如上述 man 条目的第 5 条中所述。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 cmake 链接 libc++ 时 libc++abi 的链接问题 的相关文章

随机推荐

  • 可以混淆/加密 SharedPreferences 文件吗?

    因此 我对混淆应用程序的 SharedPreferences xml 文件很感兴趣 就像 Android LVL 混淆其许可证 cahce 数据一样 这是可以想象的吗 大量的谷歌挖掘几乎没有产生任何可能解决我的问题的结果 我当然不是密码学家
  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • WordPress 按标题获取帖子,例如

    我正在尝试为 WordPress 创建一个小型搜索功能 AJAX 调用应该获取标题类似的所有帖子 quote 是否有可能在内部实现这种情况get posts 功能 别误会我的意思 阿贾克斯工作正常 我的functions php 中有aja
  • 如何使用谷歌应用程序脚本开发渐进式网络应用程序

    我使用 google app 脚本开发了一些应用程序 并将它们部署为 Web 应用程序 它们都工作正常 然后我决定将它们转换为 PWA 原因是让它们可以安装在智能手机用户的主屏幕上 能够使用推送通知 缓存等 简而言之 PWA 提供的所有优势
  • Automapper Nuget 包失败

    我尝试安装http automapper org http automapper org 但这导致了错误 Install Package AutoMapper already has a dependency defined for Mic
  • 如何在 Mac 上使用 homebrew 安装 apache-spark 2.3.3

    brew install apache spark只安装最新版本的 Spark 2 4 和 brew search apache spark没有给出任何其他选项 有没有办法用自制程序安装旧版本的 Spark Type brew tap ed
  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • 当 $.each 和 array.splice(i) 放在一起时,JQuery 处理数组超出索引错误

    最近我在互联网上搜索一些可以处理废弃的 ajax xhr 调用的代码 这就是我发现的 https stackoverflow com a 8841412 395910 xhrPool ajaxSetup beforeSend functio
  • 厚壁二维迷宫中的碰撞检测

    我必须使用 Windows Forms 为学校制作一个游戏 我的游戏包括用户必须穿过迷宫 我试图阻止我的用户使用碰撞检测直接穿过墙壁 但由于用于表示墙壁的矩形形状不同而陷入困境 这是游戏的图像 https i stack imgur com
  • CSS 停止表格行内的分页符

    我试图避免在可能超过一页的 HTML 表的行内出现分页符 我正在使用 Internet Explorer 打印预览以及 BCL EasyPDFSDK 转换为 PDF 来测试这一点 我将以下 CSS 样式以各种组合应用到 td 元素 但对于每
  • Apache Atlas:从 Java 客户端连接时出现 Http 503 服务不可用错误

    我正在从我的 MacOS 运行 atlas docker 映像 管理仪表板工作正常 我可以从仪表板创建 管理实体 但是 当我尝试运行 Atlas 源代码提供的示例 Java 应用程序时 我收到 Http 503 Service Unavai
  • 无法打开本地终端

    我尝试在 Android Studio 中初始化我的终端 但它给了我错误 它说 无法打开本地终端 java io IOException 无法创建 PTY 我的电脑运行的是 Windows 10 如何解决这个问题 当您从 Github 存储
  • Eclipse(STS)+ Maven

    我基本上有两个问题 有没有办法从 Eclipse 调用 Maven 控制台 我可以在哪里写eclipse eclipse 并开始构建 eclipse 项目 哪里有STS http www springsource com products
  • 使用 jquery 自动完成和工具提示[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 How to display the autocomplete and tooltip like th
  • Android Material主题alpha颜色问题

    我已经创建了一个构建版本为 5 0 的应用程序 我在下面编写了主题
  • ruby中如何获取屏幕分辨率

    如何在ruby脚本中获取屏幕分辨率 高度 宽度 在 Linux 上 x y xrandr scan current d x d flatten 在 Windows 上 使用WIN32OLE等 http www ruby forum com
  • Meteor - 使用 Meteor.wrapAsync() 包装 NPM

    我正在尝试使用 Meteor wrapAsync 包装超级代理 NPM 一切正常 直到下面代码的最后一行 这导致我的流星应用程序崩溃 var superagent Meteor npmRequire superagent Example o
  • 禁用 Azure 应用服务上的某些 W3C 日志记录字段

    在 Azure 应用服务中记录 Web 服务器日志时 默认情况下会记录每个字段 并且似乎没有任何方法可以禁用特定字段 有没有解决的办法 或者我错过了什么 只要 applicationhost config 中的 IIS 支持 您就可以使用X
  • Android 中的 XmlPullParser 陷入困境

    经过多个小时的搜索和调试后 我仍然停留在同一个地方 并且 Eclipse 没有帮助我 我试图解析这个 RSS 提要 http fr espnf1 com rss motorsport story feeds 0 xml type 2 这很简
  • 通过 cmake 链接 libc++ 时 libc++abi 的链接问题

    我正在尝试构建一个简单的 hello world C 使用 LLVM Clang 3 7 0 的程序 根据工具链的源代码构建libc 使用命令行 clang std c 14 stdlib libc fno exceptions hello