【问题标题】:How to set the program architecture for the compiler in VS Code?如何在 VS Code 中为编译器设置程序架构?
【发布时间】:2020-09-22 17:57:12
【问题描述】:

我编写了以下 C 程序:

#include <stdio.h>

int main()
{
    printf("size of void pointer in bytes : %d\n", sizeof(void*));
    return 0;
}

我现在使用的是 Windows 10,因此,我安装了 gcc 编译器(MinGW for Windows)。现在我想为 32 位架构编译一次程序,然后为 64 位架构编译一次。为此,我在launch.json中的args参数中添加了m32,然后编译了程序。之后,我做了同样的事情,但针对 64 位架构(添加了m64 标志)。

在这两种情况下,程序的输出都是:

size of void pointer in bytes : 8

这让我感到奇怪。如果我在 Visual Studio 中编译我的程序(在那里你可以选择非常简单的架构,在“绿色箭头”旁边的下拉菜单中),那么字大小是 4 字节(32 位架构)和 8 字节(64 位架构) 应该是这样。

我也尝试将-march=i386 用于 32 位架构,但这对我没有帮助,指针仍然是 8 字节长。似乎传递的参数根本不影响架构。我是否遗漏了什么或出于我的目的使用了错误的论点?

我的launch.json 文件(带有-m32 标志):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc.exe - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": ["-m32"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\Compilers\\MinGW\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc.exe build active file"
        }
    ]
}

【问题讨论】:

    标签: c gcc visual-studio-code


    【解决方案1】:

    launch.json 包含描述如何启动编译文件的命令。 args 是传递给程序的命令行参数(argc,argv),而不是编译器。

    您需要设置tasks.json,它基本上执行脚本。

    搜索(对我来说是 ctrl+shift+P)Tasks:Configure TaskTask:Configure Default build Task。或者您可以在终端菜单中找到它们。

    它可以自己找到gcc 并为其创建一个默认任务来编译当前活动的文件。不幸的是,我没有在 VSCode 中直接管理多文件项目的经验,所以我无法提供更多帮助,但您应该能够在 Internet 上找到 C++ 的默认 tasks.json。或者使用 CMake 或类似的。

    【讨论】:

    • 非常感谢,这就是解决方案。但是,现在我得到另一个错误。我理解它,严格来说是另一个问题,但也许你知道它为什么会发生(我通过 -m32):无法识别的仿真模式:32.exe 支持的仿真:i386pep i386pe collect2.exe:错误:ld 返回 1 退出状态 I还尝试了 i386pep 和 i386pe - 它没有帮助。
    • 对不起,我不知道,我猜MinGW根本不支持这个选项?
    • 可能的。我会看看我能用这个错误做什么。谢谢你的回答。
    猜你喜欢
    • 2018-06-14
    • 1970-01-01
    • 2022-11-04
    • 2018-11-18
    • 2019-10-20
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多