因项目需要,在AIX上编译curl-7.37.1,
configure执行ok
make时报错如下
source='progress.c' object='libcurl_la-progress.lo' libtool=yes DEPDIR=.deps depmode=aix /bin/sh ../depcomp /bin/sh ../libtool --tag=CC --mode=compile cc -qlanglvl=ansi -DHAVE_CONFIG_H -I../include/curl -I../include -I../include -I../lib -I../lib -DBUILDING_LIBCURL -qthreaded -qnoansialias -qhalt=e -O2 -c -o libcurl_la-progress.lo `test -f 'progress.c' || echo './'`progress.c
libtool: compile: cc -qlanglvl=ansi -DHAVE_CONFIG_H -I../include/curl -I../include -I../include -I../lib -I../lib -DBUILDING_LIBCURL -qthreaded -qnoansialias -qhalt=e -O2 -c -M progress.c -DPIC -o .libs/libcurl_la-progress.o
cc: 1501-230 内部编译器错误;请与您的服务代表联系
make:1254-004 上一个命令的错误码是 1。
很明显,是编译lib/progress.c文件时,导致终止。
查看progress.c文件(其中花费大约2小时,尝试是哪部分大致失败的),问题出在max5data函数的下面2行代码导致的。
else if(bytes < CURL_OFF_T_C(10000) * ONE_TERABYTE)
/* up to 10000TB, display without decimal: XXXXT */
snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "T", bytes/ONE_TERABYTE);
尝试替换等方法都不管用,索性注释掉这几行(实际上,传输T级别的文件基本没有),编译通过。
/*
else if(bytes < CURL_OFF_T_C(10000) * ONE_TERABYTE)
up to 10000TB, display without decimal: XXXXT
snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "T", bytes/ONE_TERABYTE);
*/
什么原因,高手们,给个答案,目前我懒得去深究了。
64位动态库编译
1)export OBJECT_MODE=64,设定cc编译环境为64位
2)configure,生成编译配置
3)make,编译生成