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

Linker 与libc+的链接问题+;与libc+链接时的abi+;通过cmake,linker,clang,llvm,abi,libc++,Linker,Clang,Llvm,Abi,Libc++,我正试图用LLVM/Clang 3.7.0构建一个简单的(“hello world”)C++程序,该程序是根据工具链的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

我正试图用LLVM/Clang 3.7.0构建一个简单的(“hello world”)
C++
程序,该程序是根据工具链的
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()'
[...]
未设置
LD_LIBRARY_路径
,工具链的安装目录通过以下方式添加到我的工作
路径

export PATH=$PATH:/bulk/workbench/llvm/3.7.0/toolchain4/bin/
我使用的是
ubuntugnu/Linux 14.04
,我还没有从任何存储库安装任何与LLVM或Clang相关的软件包

根据报告:

在Linux上,libc++通常只能与'-stdlib=libc++'一起使用。但是,某些libc++安装要求用户手动链接libc++abi本身。如果在使用libc++时遇到链接器错误,请尝试将'-lc++abi'添加到链接行

按照建议的方式进行操作可以获得成功的构建

所以,我的问题是:

为什么我必须在build命令行上明确指定
-lc++abi
依赖项

给予

ELF动态部分中嵌入的
RPATH
不应该被
ld
考虑,如its中
-RPATH link=dir
部分所述吗

此外,当我用

LD_LIBRARY_PATH=$(llvm-config --libdir)
初始构建命令(不指定
-lc++abi
)可以工作,正如前面提到的man条目的第5条所述

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
[...]
LD_LIBRARY_PATH=$(llvm-config --libdir)