【问题标题】:"undefined reference to `WinMain@16'" Error in gcc editor“未定义对‘WinMain@16’的引用”gcc 编辑器中的错误
【发布时间】:2018-10-05 17:58:21
【问题描述】:

我刚刚学习 c++,并开始观看 thenewboston 的 youtube 教程。不幸的是,当我使用 gcc 时,他正在使用 Code::Blocks,我没有通过单击按钮创建新类文件的选项,因此必须手动创建它们。

我不明白为什么 Code::Blocks 和 gcc 中的相同代码可以在 Code::Blocks 中使用,但在 gcc 中却不行。 gcc 是否需要对同一种语言进行不同的编码?

编辑:我自己在 Code::Blocks 中下载并测试过

其他问题谈到我需要如何给 Windows 一个入口点,但我不知道该怎么做。

Test.cpp 代码:

#include <iostream>
#include "ClassTest.h"
using namespace std;

int main() {
  ClassTest bo;
}

ClassTest.h 代码:

#ifndef CLASSTEST_H
#define CLASSTEST_H

class ClassTest {
  public:
      ClassTest();
};

#endif // CLASSTEST_H

ClassTest.cpp 代码:

#include <iostream>
#include "ClassTest.h"
using namespace std;

ClassTest::ClassTest() {
  cout << "blah blah" << endl;
}

【问题讨论】:

  • 你是如何编译这段代码的?
  • Code::Blocks 是 IDE,GCC 是编译器。不过,Code::Blocks 可以使用 GCC 进行编译。另请注意,对于 c++ 代码,请使用 g++,而不是 gcc
  • 您创建了一个 Windows 项目而不是控制台项目。
  • newboston 是一个糟糕的资源。您是否创建了 Windows 控制台项目?
  • 好的,所以我需要下载并使用 g++ 而不是 gcc?

标签: c++ gcc codeblocks


【解决方案1】:

我不太确定我是否理解问题所在;我将把它理解为“如何将这三个文件构建成一个可以从 Windows 命令行运行的 .exe?”

答案是在命令行上,在包含文件的文件夹中运行类似的东西:

g++ -c Test.cpp -o Test.o
g++ -c ClassTest.cpp -o ClassTest.o
g++ Test.o ClassTest.o -o Test.exe

前两个命令将每个 CPP 文件构建成一个“目标文件”,它本身并不是一个完整的程序,而是包含该 CPP 文件中代码的编译版本。最后一条命令告诉编译器将两个目标文件粘贴到一个程序中,并解析它们之间的所有交叉引用。 (比如Test.cpp构造ClassTest对象的部分,最终需要调用ClassTest.cpp中的ClassTest构造函数代码。)

Code::Blocks 是一个 IDE,它设计了如何在项目中构建每个源文件并自行将它们链接在一起。但是,如果您不使用 IDE,则需要以另一种方式执行此操作。您可以像这样手动执行此操作,也可以编写 Makefile 来检查哪些代码文件已更改并在运行 make 命令时重新构建和重新链接依赖于它们的所有内容,这是大多数人的方式去做吧。

至于“给 Windows 一个入口点”,那可能是指希望在屏幕上显示窗口的 GUI 应用程序。对于您编写的控制台程序,“入口点”是main(),您只需将内容打印到命令行窗口即可。要制作您自己的实际 Windows 风格的 GUI 窗口,您需要使用 Windows API,我不能告诉您太多。

【讨论】:

  • 更简单的说g++ Test.cpp ClassTest.cpp -o Test.exe
猜你喜欢
  • 2019-05-29
  • 2020-07-18
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2013-01-15
相关资源
最近更新 更多