使用 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 的计算机上时,经过我发现的一些研究后,它开始缺少 .dll
s这是因为该计算机上缺少 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
我认为我现在的问题是处理如何优化我在任何计算机上安装的应用程序。
谢谢大家。
我的案例如下:
我在 Microsoft Visual Studio 上制作了一个 GUI 程序(基于 wxWidgets),其中这段代码 运行 很好地混合了 C++ 和 C 文件,基本上 C 文件做的事情很少,但我不能丢弃它们,因为我我是 C++ OOP 的初学者——我有 Java 的 OOP 背景,我觉得这与 C++ 有很大不同——但我可以在一定程度上处理它。无论如何,该程序 运行 在 Visual Studio 2019 上运行良好,但是当我将它放在另一台没有安装 Visual Studio 的计算机上时,经过我发现的一些研究后,它开始缺少 .dll
s这是因为该计算机上缺少 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 toBus_Construct
C:/Users//Desktop/wxTest/src/cMain.cpp:13: undefined reference toDecker_Construct
C:\Users<USER>\AppData\Local\Temp\ccUB3ReN.o: In functionZN5cMain16CalculateClickedER14wxCommandEvent
: C:/Users//Desktop/wxTest/src/cMain.cpp:426: undefined reference togetCG
C:/Users//Desktop/wxTest/src/cMain.cpp:442: undefined reference togetCGz
C:/Users//Desktop/wxTest/src/cMain.cpp:454: undefined reference togetPassCGX
C:/Users//Desktop/wxTest/src/cMain.cpp:455: undefined reference togetPassCGY
C:/Users//Desktop/wxTest/src/cMain.cpp:456: undefined reference togetPassCGZ
C:/Users//Desktop/wxTest/src/cMain.cpp:457: undefined reference tototalCG
C:/Users//Desktop/wxTest/src/cMain.cpp:470: undefined reference todelay
C:/Users//Desktop/wxTest/src/cMain.cpp:528: undefined reference tofreeSeats
C:/Users//Desktop/wxTest/src/cMain.cpp:530: undefined reference tofreeSingleDecker
C:\Users<USER>\AppData\Local\Temp\ccUB3ReN.o: In functionZN5cMain19GenerateGroupsClickER14wxCommandEvent
: C:/Users//Desktop/wxTest/src/cMain.cpp:622: undefined reference toinitSingleDecker
C:/Users//Desktop/wxTest/src/cMain.cpp:627: undefined reference toinitSeats
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
我认为我现在的问题是处理如何优化我在任何计算机上安装的应用程序。
谢谢大家。