编译先前预处理的文件会更改输出
Compiling previously preprocessed file changes output
我有一个源文件,我使用选项-E
和-P
对其进行预处理(对于基于vxWorks的嵌入式平台,使用GCC 4.1.2)。所有其他选项都与编译文件时相同。这些选项是:
-Wall
-march=pentium
-nostdinc
-O0
-fno-builtin
-fno-defer-pop
-g
-c
-o
以及所有包含路径。现在,当我编译这个经过预处理的文件时,得到的对象文件比我直接编译原始文件时要小得多(大约30%)。当我链接程序时,链接器会抱怨缺少符号(都在用户代码中),而在使用原始源文件时,这种情况不会再次发生。为什么会有区别?有什么办法让它发挥作用吗?
您确定没有在命令行中丢失任何-D
定义吗?您的结果将与由于条件语句而未编译的部分一致。
另一种可能性(因为您没有具体命名编译器)是,您在vxWorks环境中使用的是通用gcc -E
,而不是arch特定的交叉编译器。交叉gcc将预定义gcc -E
所需的一些变量。
编译经过预处理的输出时,请尝试传递-fpreprocessed
选项,告诉GCC不要再进行预处理。
我能想到的唯一区别是,宏会扩展到一个标识符,这个标识符是一个已经扩展的宏名称——预处理器在这一点上停止扩展,但如果你再次运行预处理器,标识符会再次扩展。我本以为这种情况会导致编译器错误,但谁知道呢?
相关文章:
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- VI工作室代码错误无法打开输出文件主.exe
- 在代码块中查找输出文件
- 将未签名的字符写入输出文件
- 为什么我的代码不写入输出文件?
- 完成搜索任务时为空输出文件
- 如何将地图<列表<string>、矢量<string>>输出到输出文件?
- 无法在代码块 IDE 中打开输出文件.exe
- C++:更改 IF 语句中的输出文件
- 编译 gsoap 输出文件 (onvif) 时出现问题
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- while 循环中的流输出文件() 通常生成空文件
- 如何使用 Docker 访问输出文件
- 提升进程间共享内存删除、权限和输出文件
- 查找素数,然后将质数放入输出文件中
- GDB / C++ - 根据循环条件将多个变量记录到输出文件中
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- 我的输出文件未显示解决方案
- 输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然
- C++,我正在尝试创建一个有效的.bmp输出文件