编译先前预处理的文件更改输出

Bjö*_*lex 5 c++ linker g++ vxworks c-preprocessor

我有一个源文件,我使用选项预处理-E-P(使用GCC 4.1.2为基于vxWorks的嵌入式平台).所有其他选项与编译文件时相同.这些选项是:

-Wall  
-march=pentium 
-nostdinc 
-O0 
-fno-builtin 
-fno-defer-pop
-g  
-c
-o
Run Code Online (Sandbox Code Playgroud)

以及所有包含路径.现在,当我编译这个预处理文件时,生成的对象文件比直接编译原始文件要小得多(约30%).然后当我链接程序时,链接器会抱怨缺少符号(全部在用户代码中),这在使用原始源文件时也不会发生.为什么会有区别?有没有办法让这项工作?

Ben*_*son 1

您确定您没有遗漏-D命令行中的任何定义吗?您的结果将与由于条件而未编译的部分一致。

另一种可能性(因为您没有具体命名编译器)是您gcc -E在 vxWorks 环境中使用通用交叉编译器而不是特定于架构的交叉编译器。跨 gcc 将预定义一些您需要的变量gcc -E