使用GCC编译32位架构失败,如何定义对应架构宏?
GCC编译C文件时解决架构宏未定义的问题
你的头文件通过自定义宏_8BIT_ARCHITECTURE/_16BIT_ARCHITECTURE/_32BIT_ARCHITECTURE来选择对应的类型头文件,Visual Studio在配置32位平台时会自动注入对应宏,但GCC的-m32仅控制目标架构的代码生成,不会自动定义这些自定义宏,所以需要手动添加宏定义参数。
解决方法
使用GCC的-D选项直接在编译命令中定义所需的架构宏:
编译32位目标代码
gcc -m32 -D _32BIT_ARCHITECTURE -c myFile.c -I /somePath/
编译16位目标代码(若需要)
gcc -m16 -D _16BIT_ARCHITECTURE -c myFile.c -I /somePath/
编译8位目标代码(针对8位MCU等场景)
根据具体编译器支持,添加对应宏定义:
gcc -D _8BIT_ARCHITECTURE -c myFile.c -I /somePath/
说明
-D选项的作用是在编译时预定义指定的宏,等同于在代码开头写#define _32BIT_ARCHITECTURE。GCC的-m32/-m16只是设置编译的目标架构指令集,和你头文件里的自定义宏没有关联,必须手动显式定义才能让头文件的条件编译逻辑生效。
内容的提问来源于stack exchange,提问作者Wei Gong
相关产品推荐
相关产品推荐

