首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将cl,clang-cl和clang混合在同一个项目中

将cl,clang-cl和clang混合在同一个项目中
EN

Stack Overflow用户
提问于 2022-04-25 16:04:36
回答 2查看 558关注 0票数 0

上下文

我正在开发一个跨平台项目,它依赖于一个高度性能敏感的开源库。这个库支持许多不同的编译器,但最具表现力的版本是通过clang编译的,这是因为内联程序集不受MSVC编译器(cl)的支持。这向我强调了clang能够在Windows上编译代码,并释放高性能的dll库,但我对MSVC工具链和clang生态系统的互操作性的理解也存在缺陷。

问题

用clang编译的代码在多大程度上可以与MSVC工具链互操作?

standard?

  • Specifically,
  • 是由clang发出的二进制文件与cl发出的二进制文件兼容的,直到并包括最新的语言
    • ,使用clang编译的静态库(.a)可以被MSVC工具链使用吗?(即)符号定义不是dllexport/imported).
    • Can clang发出32位二进制文件吗?
    • i承认clang-cl只是clang-cl的驱动程序,但是对于新项目是否有任何实际限制或其他原因不支持clang - cl而不是cl?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-25 16:34:41

特别是

,使用clang编译的静态库(.a)能被MSVC工具链使用吗?(即)符号定义不是dllexport/导入的)。

是。我有一个相当大的Windows (基于MFC的)项目,在该项目中,我使用本机MSVC编译器构建所有实际使用MFC(或其他WinAPI)代码的组件,但对一个特定的“核心”模块(作为静态库构建)使用clang。该核心模块中的所有代码都是严格符合标准的(C++17,目前,但在下面)。我使用这个MSVC+clang组合已经有几年了,还没有遇到任何与ABI不兼容相关的问题。(但请注意,Windows上的静态库具有".lib“扩展,而不是”.a“。)

由clang发出的二进制文件是否与cl发出的二进制文件兼容,达到并包括最新的语言标准?

是的--但是C++20或更高版本需要VS 2022 : VS 209附带的clang编译器(clang编译器,V11)只识别(并包括) C++17;但是,clang V13 (由VS 2022安装)可以设置为使用C++20或C++23。(还请注意,我前面提到的库大量使用了"STL“容器,如std::vector)。

可以发出32位二进制文件吗?

是。在VS IDE中,64位和32位目标架构之间的切换对于MSVC和clang项目同样适用。在切换到ARM64目标(假设您已经安装了所需的工具)时,这似乎也有效,但我无法验证最终的输出,因为我无法访问基于an 64的Windows系统。

我认识到clang只是clang的驱动者,但是对于新项目,有什么实际的限制或其他原因不支持clang而不是cl呢?

我试着用clang工具构建我的整个项目,但是--到目前为止--都没有成功。这可能是因为我正在使用MFC (我在链接时得到了大量重复和/或丢失的符号)。但是,使用clang为Windows构建简单的控制台模式程序是很好的。

另外,还要注意:与用MSVC编译的相同代码相比,我的最后一个程序的运行时性能要好得多(即更快)。

票数 1
EN

Stack Overflow用户

发布于 2022-06-10 16:49:30

你把编译器称为clang,这是非常错误的解释。您的clang-cl.exe,而不是clang,因为clang解包g++ cpmpatible,clang-cl.exe解锁msvc兼容。如果您已经将编译示例放入其中,那么可能是: cmake -G Ninja -DCMAKE_C_COMPILER="clang-cl.exe“-DCMAKE_CXX_COMPILER="clang-cl.exe”-DCMAKE_BUILD_TYPE=Release -DCMAKE_LINKER=“llvm.exe”。每个人都会立刻明白的(我现在也是)。在信息理论中,一个例子所解释的不仅仅是文本(我是数学家,在数学中,理论是信息理论中的肉,例子--代码片段--就是肉)。clang-cl.exe中的编译器选项正是msvc中的选项,但来自clang的选项则完全不同(g++选项)。希望它能帮助下一个读者立即理解,clang-cl.exe是ment,而不是clang。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72002459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档