ubuntu编译minigui 3.0.12出现下面错误:
object.h:275:9: error: incompatible types when assigning to type ‘va_list’ from type ‘struct __va_list_tag *’
网上搜索了下说是编译系统是64位导致的,换为32位就可以了。但是我的编译系统无法换,看了下,直接在对应的makefile里面修改把该模块编译为32位。如下:
CFLAGS = -m32 -g -O2
在CFLAGS上加上-m32就可以了。
(这个最好用32位的系统来编译,不然所有makefile都要修改,比较麻烦)
复习:
复习一下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系统下。
后面回来解决这个问题:
我Ubuntu14.04是64位的:
uname -a
Linux 3.13.0-24-generic Ubuntu x86_64 GNU/Linux
步骤:
Ubuntu 64bit兼容32bit GCC 交叉编译环境搭建
方法一:
(1)sudo apt-get install lib32z1
(2)sudo apt-get install lib32stdc++6
方法二(时间较长):
(1)sudo apt-get update
(2)sudo apt-get dist-upgrade
(3)sudo apt-get install ia32-libs
下面安装:
sudo apt-get install libc6-dev-i386 lib32ncurses5-dev … # whatever 32-bit libraries
export LDFLAGS='-m32 -L/usr/lib32'
export CFLAGS='-m32'
export CXXFLAGS='-m32'
./configure …
make后面会发现下面的错误:
i386:x86-64 architecture of input file
`/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o’ is
incompatible with i386 output
然后修改libminigui-gpl-3.0.12下面的libtool文件里面的:
CC=”gcc -m32”