gpt4 book ai didi

c - gcc 使用警告/优化标志链接目标文件

转载 作者:行者123 更新时间:2023-12-02 03:06:18 26 4
gpt4 key购买 nike

我们正在使用泛型编译一个软件,其中文件首先被制成目标文件,它们是这样构建的:

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,它会做些什么吗?

编辑:根据反馈阐明含义。

最佳答案

Do we need to include optimization and warning flags during this final stage of compilation?

当然,您不需要在链接阶段包含它们。你已经知道了,因为你包括它们。但我认为你真正想知道的是......

Would it do anything if -Wall, -Wextra, and -O2 were included when building the flex binary from object files.

所有或几乎所有的警告都是在编译阶段产生的。我不知道有什么异常(exception),但可以想象有一些。因此,在链接期间传递与警告相关的标志可能会触发警告,否则您将不会收到这些警告。但这不应该以任何方式影响编译后的二进制文件。

优化不同。有些优化可以在链接时执行,但可能无法在默认优化级别执行。从链接命令中省略优化标志不应破坏您的构建,但包括它们可能会导致二进制文件更快和/或更小。

总的来说,我认为没有充分的理由避免在链接步骤中传递与编译步骤中相同的警告和优化标志。如果您愿意,传递特定于预处理器的标志(例如 -D)也没有害处,因为它们只会在链接期间被忽略。我假设所有这些都是由 make 管理的,所以您实际上并不需要每次都输入选项。

关于c - gcc 使用警告/优化标志链接目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42586080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com