windows64和linux条件编译,GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GC...

一、C程序代码

为了测试条件编译的效果,以下面这个C语言程序为例(gcc64_make.c)——复制代码

#include

#include

// 获取程序位数(被编译为多少位的代码)

int GetProgramBits()

{

return sizeof(int*) * 8;

}

int main(int argc, char* argv[])

{

printf("bits:\t%d\n",

GetProgramBits());

assert( argc>1 );

return 0;

}

main函数中,前两条语句的含义为——

第一条语句用于显示当前程序的位数。如果编译为32位版,将会显示“bits: 32”;如果编译为64位版,将会显示“bits:

64”。

第二条语句是一条断言,需要argc变量大于1。如果编译为debug版,若运行时未加命令参数,该断言失败,于是输出错误信息并终止程序;如果编译为release版,所有断言被屏蔽,不会有错误信息。

二、GCC命令行参数

复习一下GCC命令行参数,看看各个版本的区别——

32位版:加上 -m32 参数,生成32位的代码。

64位版:加上 -m64 参数,生成64位的代码。

debug版:加上 -g 参数,生成调试信息。

release版:加上 -static 参数,进行静态链接,使程序不再依赖动态库。加上 -O3

参数,进行最快速度优化。加上-DNDEBUG参数,定义NDEBUG宏,屏蔽断言。

当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码,但某些编译器存在例外,例如——

32位Linux下的GCC,默认是编译为32位代码。

64位Linux下的GCC,默认是编译为64位代码。

Window系统下的MinGW,总是编译为32位代码。因为MinGW只支持32位代码。

Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位代码,包括在32位的Windows系统下。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值