20

也许是一个非常微不足道的问题:

我需要将程序编译为 64 位(早期编写的 makefile 将其编译为 32 位)。

我看到选项 -m32 出现在每个文件编译的命令行参数中。因此,我修改了 makefile 以摆脱 OPTFLAG 中的 -m32 ,但是当程序再次编译时,我仍然看到 -m32 出现并且二进制文件仍然是 32 位的。这个 m32 是否也来自其他地方?

4

3 回答 3

23

-m32只能来自你的makefile中的某个地方,你必须追踪它(使用递归grep)并删除它。

当我能够强制 -m64 时,我得到“您选择的 CPU 不支持 x86-64 指令集”。任何线索?uname -a 给出 x86_64

该错误意味着-march=i686在 makefile 中有一个选项,该选项对 64 位编译无效,请尝试将其删除。

如果你不能删除它(努力尝试!)然后-march=x86-64在命令行上添加它会指定一个通用的 64 位 CPU 类型。

于 2012-06-18T09:16:47.043 回答
8

如果您尝试构建的软件是基于自动工具的,那么这应该可以解决问题:

./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make

或者,对于一个普通的 Makefile:

env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make
于 2012-06-18T08:16:10.823 回答
1

如果您使用的是 cmake,则可以通过以下方式添加 m64 编译选项:

add_compile_options(-m64)
于 2018-07-16T02:48:02.237 回答