Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何编译C++;在64位计算机上以64位形式编程?_C++_Compilation_Makefile_G++_64 Bit - Fatal编程技术网

C++ 如何编译C++;在64位计算机上以64位形式编程?

C++ 如何编译C++;在64位计算机上以64位形式编程?,c++,compilation,makefile,g++,64-bit,C++,Compilation,Makefile,G++,64 Bit,也许是一个非常琐碎的问题: 我需要将程序编译为64位(之前编写的makefile将其编译为32位) 每次编译文件时,我都会在命令行参数中看到选项-m32。因此,我修改了makefile以去掉OPTFLAG中的-m32,但是当程序编译时,我仍然看到-m32显示,二进制文件仍然是32位的。此m32是否也来自其他地方?如果您尝试构建的软件是基于自动工具的,这应该可以做到: ./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" &&am

也许是一个非常琐碎的问题:

我需要将程序编译为64位(之前编写的makefile将其编译为32位)


每次编译文件时,我都会在命令行参数中看到选项-m32。因此,我修改了makefile以去掉OPTFLAG中的-m32,但是当程序编译时,我仍然看到-m32显示,二进制文件仍然是32位的。此m32是否也来自其他地方?

如果您尝试构建的软件是基于自动工具的,这应该可以做到:

./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make
或者,对于普通的Makefile:

env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make

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

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

该错误意味着makefiles中有一个类似于
-march=i686
的选项,对于64位编译无效,请尝试删除该选项


如果无法删除它(请更加努力!),则在命令行中将其添加到后面将指定通用的64位CPU类型。

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

add_compile_options(-m64)

你想编译什么?如果它使用自动工具而不是调整Makefile,也许您可以使用适当的标志重新配置它。如果不是您自己的软件,您最好询问相应的社区如何正确构建他们的软件。仅从gcc的角度来看,您需要它的正确版本和
-m64
。make不预定义-m32,也不预定义任何其他系统组件(除非有任何相关的特定于发行版的修改,但通常没有),如果这是您要问的话。@mlt-m64不是必需的-m64是64位编译器的默认值。“您选择的CPU”消息意味着makefiles中有一个类似于
-march=i686
的选项,该选项对于64位编译无效,请尝试删除该选项,或者在命令行中将其添加到
-march=generic
,对不起,
-mtune=generic
有效,但不是
-march=generic
。建议移至新答案。正如我在评论中已经提到的,
-m64
是64位配置gcc的默认值。如果需要指定
-m64
,则说明您做错了。如果软件包认为它需要添加
-m32
,那么它可能做的不止这些,而您没有处理它所做的其他事情。