使用 G++ 编译器在 VS Code 上用 C 代码编译 C++

Compiling C++ with C codes on VS Code using G++ compiler

我的案例如下: 我在 Microsoft Visual Studio 上制作了一个 GUI 程序(基于 wxWidgets),其中这段代码 运行 很好地混合了 C++ 和 C 文件,基本上 C 文件做的事情很少,但我不能丢弃它们,因为我我是 C++ OOP 的初学者——我有 Java 的 OOP 背景,我觉得这与 C++ 有很大不同——但我可以在一定程度上处理它。无论如何,该程序 运行 在 Visual Studio 2019 上运行良好,但是当我将它放在另一台没有安装 Visual Studio 的计算机上时,经过我发现的一些研究后,它开始缺少 .dlls这是因为该计算机上缺少 Visual Studio 安装,而且我没有安装这些 .dll 文件的管理员权限。我在 VS Code 上寻找重建文件,我使用了 g++ 编译器,所以我需要使用 MinGw 编译器配置 wxWidgets。我设法使 wxWidgets 上的 Hello World 代码工作。当我 运行 我的代码经过一些努力后它没有工作,我消除了所有错误,但是当我为 Debug/Release 构建代码时,这是它在终端上得到的:

C:\Users<USER>\AppData\Local\Temp\ccUB3ReN.o: In function ZN5cMainC2Ev: C:/Users//Desktop/wxTest/src/cMain.cpp:13: undefined reference to Bus_Construct C:/Users//Desktop/wxTest/src/cMain.cpp:13: undefined reference to Decker_Construct C:\Users<USER>\AppData\Local\Temp\ccUB3ReN.o: In function ZN5cMain16CalculateClickedER14wxCommandEvent: C:/Users//Desktop/wxTest/src/cMain.cpp:426: undefined reference to getCG C:/Users//Desktop/wxTest/src/cMain.cpp:442: undefined reference to getCGz C:/Users//Desktop/wxTest/src/cMain.cpp:454: undefined reference to getPassCGX C:/Users//Desktop/wxTest/src/cMain.cpp:455: undefined reference to getPassCGY C:/Users//Desktop/wxTest/src/cMain.cpp:456: undefined reference to getPassCGZ C:/Users//Desktop/wxTest/src/cMain.cpp:457: undefined reference to totalCG C:/Users//Desktop/wxTest/src/cMain.cpp:470: undefined reference to delay C:/Users//Desktop/wxTest/src/cMain.cpp:528: undefined reference to freeSeats C:/Users//Desktop/wxTest/src/cMain.cpp:530: undefined reference to freeSingleDecker C:\Users<USER>\AppData\Local\Temp\ccUB3ReN.o: In function ZN5cMain19GenerateGroupsClickER14wxCommandEvent: C:/Users//Desktop/wxTest/src/cMain.cpp:622: undefined reference to initSingleDecker C:/Users//Desktop/wxTest/src/cMain.cpp:627: undefined reference to initSeats collect2.exe: error: ld returned 1 exit status The terminal process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:<USER>\Softwares\MinGW\mingw32\bin\g++.exe -g C:\Users<USER>\Desktop\wxTest\src*.cpp C:\Users<USER>\Desktop\wxTest\src*.c -o C:\Users<USER>\Desktop\wxTest\build\debug\cApp.exe -I C:\Users<USER>\Desktop\wxTest\include -I C:\wx\wxWidgets-3.1.5\include -I C:\wx\wxWidgets-3.1.5\lib\gcc_dll\mswud -L C:\wx\wxWidgets-3.1.5\lib\gcc_dll -l wxmsw31ud_core -l wxbase31ud" terminated with exit code: 1

我注意到的是一些带有 ZN5cMainC2Ev 的损坏名称,最初是 class 名称 cMain。 我认为诀窍在于 task.json 参数:

{
"version": "2.0.0",
"tasks": [
    {
        "type": "shell",
        "label": "Debug",
        "command": "C:\Amir\Softwares\MinGW\mingw32\bin\g++.exe",
        "args": [
            "-g",
            "${workspaceFolder}\src\*.cpp",
            "-o",
            "${workspaceFolder}\build\debug\${fileBasenameNoExtension}.exe",
            "-I",
            "${workspaceFolder}\include",
            "-I",
            "C:\wx\wxWidgets-3.1.5\include",
            "-I",
            "C:\wx\wxWidgets-3.1.5\lib\gcc_dll\mswud",
            "-L",
            "C:\wx\wxWidgets-3.1.5\lib\gcc_dll",
            "-l",
            "wxmsw31ud_core",
            "-l",
            "wxbase31ud",
        ],
        "options": {
            "cwd": "${workspaceFolder}"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": "build",
        "detail": "compiler: C:\Amir\Softwares\MinGW\mingw32\bin\g++.exe"
    },
    {
        "type": "shell",
        "label": "Release",
        "command": "C:\Amir\Softwares\MinGW\mingw32\bin\g++.exe",
        "args": [
            "${workspaceFolder}\src\*.cpp",
            "${workspaceFolder}\src\BusCalcs.c",
            "${workspaceFolder}\src\CG_Engine.c",
            "${workspaceFolder}\src\Helper.c",
            "-o",
            "${workspaceFolder}\build\release\${fileBasenameNoExtension}.exe",
            "-I",
            "${workspaceFolder}\include",
            "-I",
            "C:\wx\wxWidgets-3.1.5\include",
            "-I",
            "C:\wx\wxWidgets-3.1.5\lib\gcc_dll\mswu",
            "-L",
            "C:\wx\wxWidgets-3.1.5\lib\gcc_dll",
            "-l",
            "wxmsw31u_core",
            "-l",
            "wxbase31u",
        ],
        "options": {
            "cwd": "${workspaceFolder}"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": "build",
        "detail": "compiler: C:\Amir\Softwares\MinGW\mingw32\bin\g++.exe"
    }
]

}

问题已通过将 .C 文件重命名为 .CPP 文件解决,它为调试和发布正确构建,我的应用程序正常工作但是当我 运行 它在另一个计算机我丢失的负载比以前从 VS2019 构建中丢失的多 .dll 我认为我现在的问题是处理如何优化我在任何计算机上安装的应用程序。

谢谢大家。