2017-05-10 59 views
0

我使用GCC编译了包含在CFLAGS中的-O3 -fast-math的一些C代码。我很困惑在链接时是否也将这些标志传递给GCC,即将-Wl,-O3 -Wl,-fast-math放置在LDLIBS中。给予GCC连接器的优化标志的效果

确切地说-Wl,<...>是做什么的,为什么我们需要在CFLAGSLDLIBS中通过相同的选项?

此外,有没有任何特定于平台的链接器相对于这些标志进入链接器的行为?

回答

1

选项-Wl,...指导GCC传递...直经为 链接,ld,如果调用链接。

编译器优化选项-O0, -O1等不被链接器 识别,如果通过则忽略。编译器优化选项 -ffast-math与不相关的ld选项-f<so_name>, 发生冲突,链接器仅接受-shared。因此 如果-shared不通过,一个ld使用错误的结果:

/usr/bin/ld: -f may not be used without -shared 

并且如果-shared通过,则fast-math将被误解 作为<so_name>。如果传递给ld,则 表-f...的任何其他编译器选项也适用。

这里是the GCC commandline options reference 这里是一个 GNU ld

如果用GNU建设作出,本作变量LDLIBS是连接选项(-l...)常规 保留。其他链接选项 在LDFLAGS通常通过查看来自binutils的(包括BFD和黄金)this answer

+1

链接器不认识'-O'选择,他们确实有一定的效果,但一个相当小的一个。 –