【问题标题】:Static linking libc++ clang静态链接 libc++ clang
【发布时间】:2018-12-14 10:16:32
【问题描述】:

我尝试使用 Clang 静态链接 Linux 中的标准库 libc++ (https://libcxx.llvm.org/)(Arch 使用此 AUR https://aur.archlinux.org/packages/libc%2B%2B/)。

我收到错误/usr/bin/ld: cannot find -lc++

错误与代码无关,它甚至出现在“Hello World”中。

如果我删除 -static 选项,它会编译(和链接)并且生成的可执行文件可以工作。

我不想使用 libstdc++(我有理由不请不要集中讨论)并且链接必须是静态的(这是一个要求)。

我非常清楚,如果无法访问发生这种情况的机器,很难调试这些东西。但是,它发生在两台不同的机器上(都使用 Arch),所以也许我忘记了。

到目前为止我所尝试的解释在这里 (https://releases.llvm.org/7.0.0/projects/libcxx/docs/UsingLibcxx.html)

应该工作的基本命令如下 clang++ -static -stdlib=libc++ -std=c++17 main.cpp -lc++abi

【问题讨论】:

  • 错误是cannot find -lc++。链接器正在寻找文件libc++.a。你的系统上有这样的文件吗?

标签: c++ linux c++11 clang++ libc++


【解决方案1】:

那是因为您没有安装静态的libc++(即libc++.a) 在您的系统上。 Archlinux 默认不安装静态库5 years ago, 因此,您执行完全静态的链接将是一项挑战。你会 必须以递归方式对所有依赖库进行自己的静态构建。

【讨论】:

  • 对于 libc++ 来说这很简单……你甚至可以将它破解到 libc++ PKGBUILD 中并添加一个 libc++-static 子包
  • 就是这样。你能解释一下如何静态构建库吗?我尝试修改 PKGBUILD,但无法完成。
  • @o3305502 你不能在 SO 的 cmets 中询问 new questions。见makepkg + man makepkg + man makepkg.conf -> OPTIONS=...staticlibs...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多