【问题标题】:GCC to compile compile 64 bitGCC编译编译64位
【发布时间】:2018-05-02 21:52:41
【问题描述】:

我正在尝试用 64 位 G++ 编译 C++。

我正在使用 sublime text 3。这是我的构建系统文件:

{
  "cmd": ["g++ ", "-m64", "-std=c++0x", "$file", "-o", "${file_path}/${file_base_name}"],
  "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
  "working_dir": "${file_path}",
  "selector": "source.c, source.c++, source.cxx, source.cpp",
  "variants": 
  [ 
    {
      "name": "Run",
      "cmd": ["bash", "-c", "g++ -m64 -std=c++0x '${file}' -o '${file_path}/${file_base_name}.exe' &&  xterm -e bash -c '\"${file_path}/${file_base_name}.exe\" ; read'"]  
    }
  ]    
}

编译后的文件仍创建为 32 位。 当我运行 g++ --print-multi-lib 我得到:

32;@m32
   x32;@mx32

我确定这与它有关,但我不确定如何修复它,(对此很新),我尝试安装 multilib 64 但没有任何改变。

任何帮助表示赞赏。谢谢你:)

【问题讨论】:

  • 哪个操作系统?什么编译器和版本?此外,尝试在编辑器之外的命令行上构建。首先在终端中输入编译命令。请务必使用g++ -Wall -g -std=c++11 进行编译。也许将您的GCC 至少升级到 GCC 6。所以首先要学习在终端中编译,然后再配置您的 IDE 以按照您想要的方式进行编译。
  • 在 Linux 和 Unix 上,了解可执行文件是 32 位还是 64 位的正确命令是 filelddg++ --print-multi-lib 提供有关编译器配置的信息

标签: c++ build compilation g++ sublimetext3


【解决方案1】:

您的 sublime text 3 IDE 让您感到困惑和宠坏,并且您配置错误。

我希望您使用一些 POSIX 操作系统,例如Linux。

首先了解在命令行上编译(在某些终端中,在编辑器或 IDE 之外)。您绝对需要了解如何invoke the GCC compiler(在终端中使用命令)。这里有一些提示。

确保拥有最新的GCC 编译器,如果您想要 C++11 或更高版本,至少有GCC 6。也许你需要升级你的编译器。

编译一个简单的单源程序

要将single.cc 中的单源C++ 程序编译为tinyprog 可执行文件,请使用

g++ -std=c++11 -Wall -g single.cc -o tinyprog

仅供参考,-std=c++11 设置您的 C++ 标准,-Wall 要求提供几乎所有警告(您甚至可以添加 -Wextra 以获取更多警告),-g 用于调试信息(在 DWARF 中) -o tinyprog 设置输出可执行文件。执行ls -l tinyprogldd tinyprogfile tinyprog 以了解有关您的可执行文件的更多信息。

编译一个简单的多源程序

编译一个小的多源 C++ 程序,例如由 first.ccsecond.cc 组成的 smallprog 可执行文件

  1. 将这些中的每一个编译成目标文件

    g++ -std=c++11 -Wall -g -c first.cc -o first.o
    g++ -std=c++11 -Wall -g -c second.cc -o second.o
    
  2. 将这些目标文件链接到您的可执行文件中

    g++ -std=c++11 -Wall -g first.o second.o -o smallprog
    

构建更复杂的程序

如果您使用额外的库,您可能需要在编译时添加一些额外的-I includedir 选项,以及一些额外的-L libdir 和@987654348 @ libname 链接时的选项。您可能想使用pkg-config 来帮助您。如果好奇,您可以在g++ 之后添加-v,以显示g++ 完成的实际步骤

我跑g++ --print-multi-lib

这只是查询您的g++ 编译器是如何配置的。您也可以单独尝试g++ -v

一旦您能够通过(一个或多个)命令进行编译,请考虑使用一些build automation 工具。要使用GNU make 构建单个程序,您可以从this 获得灵感。

一旦您熟练地通过命令编译(直接或通过诸如makeninja 之类的构建自动化工具或通过您的脚本),请阅读您的编辑器或IDE 的文档以进行适当的配置。

【讨论】:

  • 感谢您的帮助。我已经按照你的建议做了,效果很好。但是,输出文件仍然是 32 位的,我尝试将 -m64 添加到编译命令中......没有运气。顺便说一句,使用 linux parrot。再次感谢
  • 你怎么知道输出文件是 32 位的?您使用了哪些exact 编译命令?请编辑您的问题以改进它。
  • 您好,我将编译好的 .exe 发送到运行 Win7-64 位的主 PC;它吐出一个错误,“此软件适用于 32 位平台,请联系软件开发人员”,我不记得确切的错误代码。我已经解决了 64 位编译问题。必要时,我正在使用 mingw 编译到我的 Windows 机器上。使用此编译命令:'x86_64-w64-mingw32-g++ -o main.exe Test.cpp --static'。再次感谢您的帮助
  • 另外,我现在已经了解了一些关于命令行编译的知识。感谢您的建议!
  • 完成:-)。对不起,我忘记了,这个网站的新手。
猜你喜欢
  • 2016-11-15
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2013-08-25
  • 2017-08-28
相关资源
最近更新 更多