也许是一个非常琐碎的问题:
我需要将程序编译为64位(先前的makefile编译为32位)。
我在每个文件编译时的命令行参数中看到了-m32
选项。因此,我修改了makefile以摆脱 OPTFLAG
中的 -m32
,但是当程序编译时,我仍然看到 -m32
出现,而且二进制文件仍然是32位的。这个m32
是否还从其他地方来?
也许是一个非常琐碎的问题:
我需要将程序编译为64位(先前的makefile编译为32位)。
我在每个文件编译时的命令行参数中看到了-m32
选项。因此,我修改了makefile以摆脱 OPTFLAG
中的 -m32
,但是当程序编译时,我仍然看到 -m32
出现,而且二进制文件仍然是32位的。这个m32
是否还从其他地方来?
-m32
只能从您的 makefiles 中某处得到,您需要跟踪它(使用递归 grep 命令)并将其删除。
当我强制使用 -m64 时,我得到了“CPU you selected does not support x86-64 instruction set”的错误。有什么线索吗?uname -a 命令的输出结果是 x86_64。
这个错误意味着在 makefiles 中有像 -march=i686
这样的选项,在 64 位编译中无效,请尝试将其删除。
如果您无法删除它(请再努力!),那么在命令行中添加 -march=x86-64
将指定一个通用的 64 位 CPU 类型。
如果您正在构建的软件是基于autotools的,那么这应该可以解决问题:
./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make
或者,对于一个普通的Makefile:
env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make
-m64
是为 64 位配置的 gcc 的默认设置。如果您需要指定 -m64
,那么您可能做错了什么。如果该软件包认为它需要添加 -m32
,那么它可能会执行更多操作,而您无法处理其余部分。 - user743382m64
编译选项:add_compile_options(-m64)
-m64
http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options。 - mlt-mtune=generic
是有效的,但-march=generic
不是。建议已移至新答案。 - Jonathan Wakely