c++程序和SDL中的main()冲突
main() conflict in a C++ program and SDL
我在windows操作系统下使用QT Creator的简单程序中使用SDL。但是,当我构建代码时,我遇到了以下链接错误。
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
我通过代码发现在我的.cpp
文件中不能识别main()
,因为在SDL_main.h
中引用了相同的关键字,如下所示:
#define main SDL_main
/** The prototype for the application's main() function */
extern C_LINKAGE int SDL_main(int argc, char *argv[]);
当我单击.cpp文件中的main函数时,我跳到SDL_main.h中的定义,该定义验证存在某种冲突。
所以,我猜链接器不识别我的。cpp文件中的main()。下面是我的代码:
#include <QtCore>
#include <opencv2/opencv.hpp>
#include "vlcvideocapture.h"
int main()
{
clsVlcVideoCapture videoCapture("ip.camera");
int key = 0;
while(key != 27) {
cv::Mat frame;
int frameNumber = videoCapture.grabFrame(frame);
if(frameNumber == -1)
continue;
cv::imshow("frame", frame);
key = cv::waitKey(30);
}
return 0;
}
这里发生了什么,我如何以合理的方式解决这个问题。如有任何帮助,不胜感激。
更新:
有些人说要使用#undef main
,但当我这样做时,会弹出预期的以下错误:
cannot initialize SDL
SDL Wiki基本上提供了这个例子:
#define SDL_MAIN_HANDLED
#include "SDL.h"
int main()
{
SDL_SetMainReady();
SDL_Init(SDL_INIT_VIDEO);
...
SDL_Quit();
}
定义 SDL_MAIN_HANDLED
避免将main
定义为宏。
调用 SDL_SetMainReady()
是必要的,以模拟SDL的main
的效果(该函数的存在是为了这个特定的目的)。
为了避免SDL定义main
函数,似乎您所需要做的就是不链接到"SDL2main"库。
引用某人的帖子,关于这个:
” SDL2main和SDL2test是SDL2的两个辅助库。
SDL2main提供了SDL_main(),它是所有SDL应用程序的全局入口点。您不需要或被迫使用它,但是它的存在是基于SDL支持的系统的多样性。Windows使用WinMain(), Linux使用main(), Android需要JNI和一些Java来实际使用SDL,所以SDL_main()使事情变得更简单。
另一方面,SDL2test提供了一些与SDL目的不直接相关的功能。有些对普通程序有用,有些则直接与测试程序相关,您可以选择使用它们或忽略它们。
如果您想使用SDL2,那么SDL2main和SDL2test都不是必需的,它们只是一些不错的选择。
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 不确定要在我的main中放入什么才能使我的代码正常工作
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 函数是否可以访问传递给main()的参数
- 链表中写入访问冲突的未知原因
- 在main()之外初始化std::vector会导致性能下降(多线程)
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 将静态库转换为 DLL 会导致在 main 之前出现访问冲突
- c++抛出0xC0000005:写入位置0xFEEEFEEE的访问冲突.从main返回时
- 我收到void main()和使用命名空间std;之间的冲突;?我正在使用代码块
- c++程序和SDL中的main()冲突
- 顶点着色器和片段无法编译,与main冲突