C++ C+中的main()冲突+;程序与SDL

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

我在一个简单的程序中使用SDL,在windows操作系统下使用QT Creator。但是当我构建代码时,我遇到了以下链接错误

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头文件部分包含有关如何禁用SDL
main
的信息,SDL
main
问题在许多SO问题中都有讨论。但是,虽然我能够找到几个这样的问题,但我无法找到SDL代码中详细说明的简单答案。大多数答案都是关于通过做邪恶的体操来达到一致,而不是仅仅负责。为什么你会同时想要SDL和Qt?O_O@Drop:不,这不是重复,尽管使用
intmain(intargc,char*argv[])
在技术上可行。首先,它不是关于QT,其次,它不是关于如何禁用SDL
main
东西,而是关于为什么会有这种机制。关于原因的答案都是错误的:唯一合理的答案是完全不称职。这一点很重要。不要在链接器中包含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();
}