我知道其中一个使用libstdc++,另一个使用msvc标准库,但是当我在不链接的情况下编译以下内容时,它有什么区别呢?
int add(int a, int b) {return a + b;}
产生的目标代码有什么不同吗?还是相同的?其他目标之间有什么区别?
命令为clang -c test.c -target x86_64-pc-windows-msvc/gnu。
谢谢
发布于 2022-07-31 16:46:19
在clang中x86_64-pc-windows-msvc和x86_64-pc-windows-gnu目标的区别是什么?
这两种构建用于不同的C语言实现,在此上下文中,这意味着标准库、标头和库搜索路径以及工具(特别是链接器)。前者为Microsoft (++)构建,后者用于GNU (我相信是由MinGW和兼容工具链提供的)。
所产生的目标代码有什么不同吗?还是相同的?
您可能一开始就没有为其中一个或两个目标获取任何对象代码。每个组件都需要在系统上安装相应的开发组件,这些组件不是由Clang提供的,
如果这两个目标实际上都是可行的,那么Clang将不仅使用所选目标的标准库的函数,而且还使用它的标头。根据程序的不同,这可能会产生以次要方式不同的对象代码。
和其他目标之间的区别是什么
据我所知,Windows上的GNU C使用相同的ABI (函数调用约定、数据类型定义、布局规则、.)因此,作为MSVC,这两个目标在这些领域不应该有任何区别。对于大多数其他目标来说,情况并非如此。如果您选择了32位目标或Linux目标(例如),那么您可以期望得到更大的差异,并且结果可能无法在构建机器上工作。
https://stackoverflow.com/questions/73184707
复制相似问题