使用clang链接静态库,与顺序无关
Linking static libraries with clang independent of order
在GCC中,我可以使用链接器标志-Wl,--start-group
和-Wl,--end-group
来解决具有循环依赖关系的库的链接问题。我想对clang做同样的事情,但这个功能似乎在lld 3.2版本中被删除了。我该怎么做?
LLVM 3.2的发行说明指出
llvm ld和llvm存根已被删除,llvm ld功能可以部分替换为llvm link|opt|{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。
我不喜欢循环依赖:),但这里有些人说他们通过两次链接一些库来处理这种情况。我还没有尝试过,但这可能会增加代码的占用空间。
$(CC) -o myApp -lfoo -lbar -lfoo
我不知道这是否适用于叮当声,但它可能值得一试。
最好的解决方案是删除循环依赖关系,因为它会在未来给您带来更多问题。
我在使用QT c++项目链接自定义clang编译器时遇到了类似的问题。
问题是QT使用的是clang(c编译器)而不是clang++(c++编译器)。通过在QT项目中将编译器定义为clang++而不是clang(设置QMAKE_CXX=clang++),项目链接成功。
据我所知,gcc和g++也是如此。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 数到第n个楼梯的路(顺序无关紧要)
- 奇怪的结构&GCC&clang(void*返回类型)
- 优先顺序:智能指针和类析构函数
- 数据成员SFINAE的C++17测试:gcc vs clang
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在循环中按顺序遍历成员变量
- 独立读取-修改-写入顺序
- 包括带有 clang 格式的转发标头的顺序
- 相同的代码,如果 tie 存在于priority_queue中,则顺序不同,使用 clang 和 gcc
- 当指定初始化程序的顺序和字段声明不一致时,clang可以删除函数调用
- 使用clang链接静态库,与顺序无关
- 为什么 clang 编译器标志的顺序会影响生成的二进制大小
- g++/clang++中参数的顺序与makefile
- c++ vs intel/clang参数传递顺序
- Clang访问修饰符顺序和decltype