Che*_*ath 11 linux 64-bit gcc long-integer
我正在努力将应用程序移植到Linux平台上的64位.该应用程序目前在Linux,Windows,Mac 32位和Windows 64位上受支持.我们经常遇到的问题之一是对int使用long,反之亦然.直到现在这都不是问题,因为long和int在当前支持应用程序的平台中是可互换的(都是4个字节).代码库是一个巨大的代码库,许多遗留代码都带有#defines用于许多数据类型,这使得搜索所有long的使用并使用int适当替换很麻烦.
-m32 生成32位代码.
-mx32 生成64位代码但使用32位长和指针.
在Linux x86_64上,ABI指定long是8字节类型(LP64).事实上,大多数(如果不是全部)64位Unix系统(包括64位OS X,AFAIK)都是LP64,因此这并不是Linux特有的.
除了修复你的代码,没有.
如果你需要一个足以存储指针值的可移动整数类型,请使用intptr_t或uintptr_t(但通常希望将指针值存储到整数中意味着你做错了,所以请三思!).对于能够表示两个指针之间差异的整数类型,请使用ptrdiff_t.对于对象的大小,请使用size_t.