我们正在使用泛型编译一段软件,其中的文件首先生成为对象文件,它们的构建方式如下:
arm-unknown-linux-gnu-gcc -c -O2 -Wstrict-prototypes -Wdeclaration-after-statement -fsigned-char -I/opt/tm-sdk/include -mlittle-endian -Wno-trigraphs -fno-strict-aliasing -fno-omit-frame-pointer -march=armv4 -mtune=arm9tdmi -Wall -Wextra -o src/flex.o src/flex.c
...
arm-unknown-linux-gnu-gcc -c -O2 -Wstrict-prototypes -Wdeclaration-after-statement -fsigned-char -I/opt/tm-sdk/include -mlittle-endian -Wno-trigraphs -fno-strict-aliasing -fno-omit-frame-pointer -march=armv4 -mtune=arm9tdmi -Wall -Wextra -o src/flexdb.o src/flexdb.c然后将其与以下方面联系起来:
arm-unknown-linux-gnu-gcc -o flex src/flex.o src/flexdb.o src/flexio.o src/flexprotocol.o src/flexsettings.o src/flexstate.o -L/opt/tm-sdk/lib -ltag -lrt -ltmreader -lsqlite3 -lsha1我的问题是:在链接过程中是否需要包括优化和警告标志?如果在从对象文件创建flex二进制文件时包含了-Wall、-Wextra和-O2,那么它会做什么吗?
编辑:根据反馈澄清含义。
发布于 2017-03-03 19:06:13
在编译的最后阶段,我们是否需要包括优化和警告标志?
当然,您不需要在链接阶段包含它们。你已经知道了,因为你不包括他们。但我想你真正想知道的是..。
如果在从对象文件构建flex二进制文件时包含了-Wall、-Wextra和-O2,它会做些什么吗?
所有或几乎所有警告都是在编译阶段生成的。我不知道有什么例外,但可以想象会有一些例外。因此,在链接期间传递与警告相关的标志可能会触发警告,否则您将不会收到警告。但这不应以任何方式影响编译后的二进制文件。
优化是不同的。有些优化可以在链接时执行,但可能不能在默认的优化级别上执行。从链接命令中省略优化标志不应该破坏您的构建,但是包含它们可能会导致二进制文件的速度更快和/或更小。
总的来说,我认为没有什么好的理由避免在链接步骤中传递与编译步骤中相同的警告和优化标志。如果您愿意,传递特定于预处理程序的标志(例如-D)也是无害的,因为它们在链接期间只会被忽略。我假设所有这些都是由make管理的,所以并不是每次都需要输入这些选项。
发布于 2017-03-03 18:32:48
不,你只是用gcc的最后一次调用调用链接器,-W和-O标志是用于编译器的。
https://stackoverflow.com/questions/42586080
复制相似问题