在Cygwin64编译GMP时make报错:m4无法打开gcc
在Cygwin64下编译GMP库时make报错的问题
执行./configure无异常,但运行make时出现以下输出:
C:/cygwin64/bin/sh.exe ../libtool --mode=compile --tag=CC ../mpn/m4-ccas --m4="m4" gcc -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_`echo invert_limb_table | sed 's/_$//'` -O2 -pedantic -fomit-frame-pointer -m64 -mtune=k8 -march=k8 `test -f 'invert_limb_table.asm' || echo './'`invert_limb_table.asm libtool: compile: ../mpn/m4-ccas "--m4=m4 gcc" -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_invert_limb_table -O2 -pedantic -fomit-frame-pointer -m64 -mtune=k8 -march=k8 invert_limb_table.asm -o invert_limb_table.o m4 gcc -DHAVE_CONFIG_H -D__GMP_WITHIN_GMP -DOPERATION_invert_limb_table invert_limb_table.asm >tmp-invert_limb_table.s
随后报错:m4: cannot open gcc': No such file or directory`,已确认GCC安装且可正常执行。
问题原因
核心问题是Cygwin环境下libtool与shell的参数解析不兼容:../mpn/m4-ccas脚本被传入了带引号的"--m4=m4 gcc"参数,导致m4错误地将gcc当作需要读取的输入文件,而非后续编译命令的一部分,最终触发找不到文件的报错。
解决方法
修改m4-ccas脚本修复参数解析:
找到GMP源码目录下的mpn/m4-ccas文件,打开后定位到处理--m4参数的代码段,将原本直接赋值的逻辑调整为去除多余引号。例如,找到类似M4="$optarg"的行,替换为:M4=$(echo "$optarg" | sed 's/^"//;s/"$//')该操作会剥离参数两端的引号,让m4正确识别
gcc作为后续命令而非输入文件。重新执行编译流程:
修改脚本后,先执行make clean清理之前的编译残留,再重新运行./configure,最后执行make即可正常编译。禁用汇编优化绕开问题:
若不想修改脚本,可在配置阶段跳过汇编代码编译,直接用纯C代码构建GMP。执行以下命令:./configure --disable-assembly make
内容的提问来源于stack exchange,提问作者Coarse Rosinflower
相关产品推荐
相关产品推荐

