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