c++ - MinGW G++ 未编译
问题描述
我正在尝试编译一个简单的“hello world”C++ 程序,但是当我使用 g++ 命令时,我收到错误“undefined reference to `WinMain@16”,这发生在我在 vscode 或终端中编译时,发生了什么?代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> msg {"Hello World"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
}
解决方案
您的错误不是编译器,而是链接器错误。这意味着它仍然可以正常编译但无法链接。
包含一个头文件(如果它可以在编译器用来查找头文件的包含路径中找到),所以这很好用。
但是要将两个(对象)文件链接在一起,它必须知道应该链接哪些文件。它应该如何决定使用哪些文件?
这就是在其中创建项目(和其他 IDE)或创建 makefile 的原因。
如果您在“设置 -> 编译器和调试器... -> 全局编译器设置 -> [the_compiler_you_use] -> 其他设置(最右边的选项卡) -> 编译器登录”中打开完整的命令行日志记录,您可以看到发送了哪些命令到编译器/链接器,区别在于单个文件和具有多个文件的项目之间。
顺便说一句:你的书/教程应该解释编译和链接文件所需的步骤,如果包含头文件会发生什么以及如何使用预构建库/dll。
推荐阅读
- c# - 在给定半径、中心和 3D 位置的球体上查找点
- windows - 清除特定文本文件行的内容而不删除回车
- haskell - 如何在侧面和向下建造一棵树?
- python - 运行 pyinstaller 时出错(1920,'LoadLibraryEx','系统无法访问文件')
- c - 在C中的结构上使用malloc后数组中的默认值是什么
- python - python内存如何管理字符串对象?
- python - 计算python字符串中出现一次的唯一字母总数?
- c# - 将事件传播到所有控件
- android - 两个组件中的范围注释基本上意味着什么(一个取决于另一个)
- mysql - sql检查列中的值是否大于行数