在GCC中,我可以使用链接器标志-Wl,--start-group
和-Wl,--end-group
来解决与具有循环依赖关系的库的链接问题。我想对clang做同样的事情,但似乎这个功能是dropped in lld version 3.2。我该怎么做?
答案 0 :(得分:4)
LLVM 3.2的release notes说明了
llvm-ld和llvm-stub已被删除,llvm-ld功能可以部分替换为llvm-link |选择| {llc | as,llc -filetype = obj} | ld,或完全由Clang取代。
默认情况下,clang似乎使用系统链接器。这是在Linux上,例如它使用GNU ld:
$ clang --version
clang version 3.2 (branches/release_32 170558)
...
$ clang -Wl,--verbose
GNU ld (GNU Binutils; devel:gcc / openSUSE_12.3) 2.24.0.20140403-196
...
这表明您可以像使用GCC一样使用-Wl, - start-group和-Wl, - end-group。
答案 1 :(得分:3)
我不是循环依赖的粉丝:)但 here 有人说他们通过两次连接一些库来处理这种情况。我没有尝试过,但这可能会增加你的代码的足迹。
$(CC) -o myApp -lfoo -lbar -lfoo
我不知道这是否适用于clang,但它可能值得一试。
最佳解决方案是删除循环依赖项,因为它将在未来产生更多问题。
答案 2 :(得分:0)
我在使用QT c ++项目链接自定义clang编译器时遇到了类似的问题。
问题是QT使用的是clang(c编译器)而不是clang ++(c ++编译器)。通过在QT项目中将编译器定义为clang ++而不是clang(设置QMAKE_CXX = clang ++),项目成功链接。
据我所知,gcc和g ++也是如此。