C++ C+中的main()冲突+;程序与SDL
我在一个简单的程序中使用SDL,在windows操作系统下使用QT Creator。但是当我构建代码时,我遇到了以下链接错误C++ C+中的main()冲突+;程序与SDL,c++,qt,sdl,C++,Qt,Sdl,我在一个简单的程序中使用SDL,在windows操作系统下使用QT Creator。但是当我构建代码时,我遇到了以下链接错误 MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup 我浏览了代码,发现main()在我的.cpp文件中无法识别,因为在SDL_main.h中引用了相同的关键字,如下所示: #define ma
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
我浏览了代码,发现main()
在我的.cpp
文件中无法识别,因为在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;
}
SDL Wiki主要提供: 定义
SDL\u MAIN\u 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都不是必需的,它们只是一些不错的选择
也请查看()。但它没有解决
主要问题。我记得您引用的SDL头文件部分包含有关如何禁用SDLmain
的信息,SDLmain
问题在许多SO问题中都有讨论。但是,虽然我能够找到几个这样的问题,但我无法找到SDL代码中详细说明的简单答案。大多数答案都是关于通过做邪恶的体操来达到一致,而不是仅仅负责。为什么你会同时想要SDL和Qt?O_O@Drop:不,这不是重复,尽管使用intmain(intargc,char*argv[])
在技术上可行。首先,它不是关于QT,其次,它不是关于如何禁用SDLmain
东西,而是关于为什么会有这种机制。关于原因的答案都是错误的:唯一合理的答案是完全不称职。这一点很重要。不要在链接器中包含sdl_main.lib文件tab@AboAnas这不是解决问题的办法。它还没有被添加。
cannot initialize SDL
#define SDL_MAIN_HANDLED
#include "SDL.h"
int main()
{
SDL_SetMainReady();
SDL_Init(SDL_INIT_VIDEO);
...
SDL_Quit();
}