【发布时间】:2014-04-25 22:12:14
【问题描述】:
我正在尝试确定在 linux 下从 llvm 项目构建和使用 libcxxabi 是否有意义。
我的libcxxabi 已链接到
ldd libc++abi.so.1.0
linux-vdso.so.1 => (0x00007fff2e0db000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd658f0d000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd658d05000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd65893c000)
libc++.so.1 => /path/where/clang/is // edited
/lib64/ld-linux-x86-64.so.2 (0x00007fd6593ab000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd658465000)
所以它使用gcc_s 库、GNU librt,唯一真正的区别是它使用libc++ 而不是libstdc++,但这到底有多好?
鉴于 abi 库的关键作用,我应该在这样的平台下选择libcxxabi 吗?
我的问题不在于如何构建它,或者这是否可行,而是如果这是一个好主意C++ 方面,我可以获得什么样的好处,或者什么样的好处如果您已经在使用它,您将获得的好处。
【问题讨论】:
-
我觉得你的 libcxxabi 链接到 libc++ 很奇怪。应该反过来。至于你的问题。在仍然依赖于 libsupc++(静态链接到 libstdc++)的 Linux 系统上,确实没有理由使用 libcxxabi。不过,如果您想制作一个非 gnu linux 系统,它会很有用。
-
也许应该与其他标准 c++ 库实现进行一些性能比较?此外,直到 GCC 5.1,libstdc++ 不符合 C++11。现在这两个实现共存于共享对象中,但在不同的命名空间下。
-
不要使用 libcxxabi。它适用于 libcxx (libc++),并且仅适用于 macOS。 Homebrew 的 llvm 公式甚至没有使用它,因为它添加了一个 rpath,而 Homebrew 维护者大多是被尊崇的 Web 开发人员,所以他们只是删除了他们不理解的内容。
标签: linux clang llvm abi libc++