【发布时间】:2017-03-03 18:30:57
【问题描述】:
我们正在使用泛型编译一个软件,其中文件首先被制作成目标文件,它们的构建方式如下:
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,它会做任何事情吗?
编辑:根据反馈阐明含义。
【问题讨论】:
-
C 中的泛型是编译时表达式。不知道为什么这会是相关的。以及哪个“编译的最后阶段”?编译器一次运行(从用户视图)
-
我只是将其视为一个两步过程。构建目标文件,然后合并目标文件。
-
构建!= 编译!
-
你说得对,“编译的最后阶段”令人困惑。
-
@Kyles
-c开关的意思是“只编译和/或汇编,但不链接”。最后一个命令称为linking。 GCC 将成为 GNU 链接器、ld 的前端
标签: c gcc compiler-optimization gcc-warning object-files