也许是一个非常微不足道的问题:
我需要将程序编译为64位(编写早期的makefile以将其编译为32位)。
我看到选项-m32出现在每个文件编译的命令行参数中。所以,我修改了makefile以摆脱OPTFLAG中的-m32,但是当程序编译时,我仍然看到-m32出现,二进制文件仍然是32位。这个m32也来自其他地方吗?
答案 0 :(得分:18)
-m32
只能来自你的文件中的某个地方,你必须追踪它(使用递归的grep)并将其删除。
当我能够强制-m64时,我得到“你选择的CPU不支持x86-64指令集”。任何线索? uname -a给出x86_64
该错误意味着makefile中有一个类似-march=i686
的选项,对于64位编译无效,请尝试删除它。
如果你不能删除它(更加努力!),那么在命令行后面添加-march=x86-64
将指定一个通用的64位CPU类型。
答案 1 :(得分:5)
如果您尝试构建的软件是基于autotools的,那么这应该可以解决问题:
./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make
或者,对于一个普通的Makefile:
env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make
答案 2 :(得分:0)
如果您使用的是cmake,则可以通过以下方式添加m64编译选项:
add_compile_options(-m64)