mingw-w64和Linux下的GCC有区别吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mingw-w64和Linux下的GCC有区别吗相关的知识,希望对你有一定的参考价值。

参考技术A mingw是windows下的GNU工具链,包含gcc和binutils等工具,已经过时,建议使用mingw-w64。gcc是GNU开发的编译器套装,也特指GNUC编译器。

GCC 的“-Wl,option”和“-Xlinker option”语法有区别吗?

【中文标题】GCC 的“-Wl,option”和“-Xlinker option”语法有区别吗?【英文标题】:Is there a difference between the "-Wl,option" and "-Xlinker option" syntax for GCC? 【发布时间】:2011-11-05 11:23:47 【问题描述】:

我一直在查看一些配置文件,并且看到两者都在使用(尽管在不同的架构上)。如果您在 Linux 机器上使用 GCC,将选项传递给链接器的两种语法有区别吗?

阅读 GCC 手册,据我所知,它们的解释几乎相同。

【问题讨论】:

【参考方案1】:

来自man gcc

-Xlinker 选项

将选项作为选项传递给链接器。您可以使用它来提供 GCC 不知道如何识别的特定于系统的链接器选项。

如果要传递带有单独参数的选项,则必须使用 -Xlinker 两次,一次用于选项,一次用于参数。例如,要传递 -assert 定义,您必须编写 -Xlinker -assert -Xlinker 定义。编写 -Xlinker "-assert definitions" 不起作用,因为这会将整个字符串作为单个参数传递,这不是链接器所期望的。

使用 GNU 链接器时,使用 option=value 语法将参数传递给链接器选项通常比单独的参数更方便。例如,您可以指定 -Xlinker -Map=output.map 而不是 -Xlinker -Map -Xlinker output.map。其他链接器可能不支持命令行选项的这种语法。

-Wl,选项

将选项作为选项传递给链接器。如果选项包含逗号,则在逗号处将其拆分为多个选项。您可以使用此语法将参数传递给选项。

例如,-Wl,-Map,output.map 将 -Map output.map 传递给链接器。使用 GNU 链接器时,您也可以使用 -Wl,-Map=output.map 获得相同的效果。

如您所见,唯一的区别是-Wl 允许您通过逗号指定多个参数,例如-Wl,-rpath,/my/libs,而-Xlinker 无法做到这一点;另一方面,-Xlinker 可能更具自我描述性。任你选。还要检查其他编译器(想到nvccclang),看看它们中的任何一个在语法上是否一致,然后如果这对您很重要,则将其用于可移植性。

【讨论】:

您可以从多个 -Xlinker 选项中获得相同的行为,如手册中所述。我已经阅读了手册页,从中我相信没有区别。我想知道的是,除了个人喜好之外,您是否有任何理由会在野外的代码中看到这两种情况(例如,可移植性或一种恶习等)。 好吧,正如我所说,其他编译器也可能支持其中一个选项,但不支持另一个。例如,nvcc 只接受 -Xlinker。但这不再是一个纯粹的“gcc”问题:-)

以上是关于mingw-w64和Linux下的GCC有区别吗的主要内容,如果未能解决你的问题,请参考以下文章

MinGW-w32 与 MinGW

使用 cmake 和 mingw-w64 错误编译测试程序

getline 函数未使用 mingw-w64 gcc 编译

传递指向成员函数的指针在 MinGW-w64 中编译,但不在 gcc 中

MinGW-W64下载与安装

WebKit 和 npapi 和 mingw-w64