fooler 发表于 2024-3-20 13:02:19

vscode编译32位C++程序报错

系统: win10 IDE: VSCode

问题描述: 在VSCode的终端使用命令行编译入门程序时报错

命令行信息: g++ -m32 main.cpp -o main.exe

报错内容: D:/010-app/012-develop/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/010-app/012-develop/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../libstdc++.dll.a when searching for -lstdc++
...
...
D:/010-app/012-develop/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/010-app/012-develop/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../libmingw32.a when searching for -lmingw32

即使通过微软的包管理器msys64更新了mingw64编译套件, 仍然报错, 求佬解惑

FishC 发表于 2024-3-20 13:02:38

这个报错意味着你的编译器(MinGW)正在尝试链接错误的库文件,导致编译失败。原因是你正在尝试在64位操作系统上编译32位程序。

出现这个问题的解决方法之一是将MinGW切换到32位版本。以下是一种可能的解决方法:

1. 首先,请确保你的计算机上已经安装了32位的MinGW编译器。
   - 如果没有安装,请下载并安装MinGW-w64 32位版本。你可以在MinGW-w64官方网站的下载页面中找到安装程序:http://mingw-w64.org/doku.php/download/win-builds
   - 在下载页面中选择32位版本,并按照安装向导进行安装。

2. 安装完成后,你需要在VSCode中配置你的编译器路径。

   - 打开VSCode,点击"文件" -> "首选项" -> "设置"。然后,在搜索框中输入"cpp"。
   - 在"C/C++配置"部分找到"编译任务",然后点击"编辑设置(json)"。这将打开一个名为"c_cpp_properties.json"的文件。
   - 在文件中找到"configurations"部分,并在其下方添加以下代码:
   {
       "name": "Win32",
       "includePath": [
         "${workspaceFolder}/**"
       ],
       "defines": [],
       "compilerPath": "C:\\路径\\到\\你的\\32位\\MinGW\\bin\\g++.exe",
       "cStandard": "c11",
       "cppStandard": "c++17",
       "intelliSenseMode": "${default}"
   }
   - 注意将上面的路径替换为你的32位MinGW编译器的路径。
   - 保存文件并关闭。

3. 然后重新打开你的终端并尝试再次编译你的程序,看看是否仍然报错。

希望这可以解决你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

fooler 发表于 2024-3-20 13:03:09

这是我tasks.json的内容:
{
            "type": "cppbuild",
            "label": "build (32-bit)",
            "command": "D:\\010-app\\012-develop\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "-m32",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}_32.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
      }

FishC 发表于 2024-3-20 13:03:24

fooler 发表于 2024-03-20 13:03
这是我tasks.json的内容:
{
            "type": "c ...

根据你提供的`tasks.json`内容,我发现在`args`字段中缺少编译参数。正确的`tasks.json`配置应该包括以下内容:

{
    "version": "2.0.0",
    "tasks": [
      {
            "type": "cppbuild",
            "label": "build (32-bit)",
            "command": "D:\\010-app\\012-develop\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-m32", // 添加"-m32"编译参数
                "${file}", // 当前打开的文件路径
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe" // 输出的可执行文件路径
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
      }
    ]
}

请把这段代码粘贴到你的`tasks.json`文件中,然后重新尝试编译你的程序。希望这次能够成功编译!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

fooler 发表于 2024-3-20 15:33:42

问题已解决

FishC 发表于 2024-3-20 15:33:53

fooler 发表于 2024-03-20 15:33
问题已解决

太好了!很高兴听到你的问题已经解决。如果你还有其他问题或需要进一步的帮助,请随时提问。祝编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: vscode编译32位C++程序报错