Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带Qt的未定义引用SDL_Init_C++_Qt - Fatal编程技术网

C++ 带Qt的未定义引用SDL_Init

C++ 带Qt的未定义引用SDL_Init,c++,qt,C++,Qt,我已经经历过类似的问题,但没有一个能解决我的问题。 因此,我尝试在Qt小部件中使用SDL进行教育,并且我总是在我调用的每个SDL函数上获得未定义的引用 以下是我在测试中使用的最低限度代码: #include "mainview.h" #include <QApplication> #include "SDL.h" #undef main int main(int argc, char *argv[]) { QApplication a(argc, argv); M

我已经经历过类似的问题,但没有一个能解决我的问题。 因此,我尝试在Qt小部件中使用SDL进行教育,并且我总是在我调用的每个SDL函数上获得未定义的引用

以下是我在测试中使用的最低限度代码:

#include "mainview.h"
#include <QApplication>
#include "SDL.h"
#undef main


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainView w;
    w.show();

    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* window = SDL_CreateWindowFrom((void*)w.centralWidget->winId());
    SDL_Renderer* render = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);

    SDL_SetRenderDrawColor(render, 255, 0, 0, 255);
    SDL_RenderFillRect(render, NULL);
    SDL_RenderPresent(render);

    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(render);
    SDL_Quit();
    return a.exec();


}
根据我读到的其他答案,问题似乎来自图书馆的链接。 我以前从未真正使用过这个文件或其他qmake,因此我不确定使用的路径。我在windows上工作,根据,我应该写完整的路径,但是我在windows上遇到了访问授权问题。 此外,将路径更改为假路径似乎不会使编译器感到不安。 然而,当我尝试使用

LIBS += -L SDL/lib/x86/ -lSDL2.lib
编译器找不到该文件。 我使用的编译器是一个32位的MinGW,所以我在lbsdb.org上下载了相应的文件,我在每个子文件夹上都尝试了x86_64、i686,。。。但都不管用

很抱歉,如果我的写作方式很奇怪,我是法国人。

当你有一个.lib文件时,最简单的方法就是为linker添加文件。您的项目似乎有它的子目录,但是您可能正在使用一个单独的构建目录,所以问题可能就在于此。要修复,请使用:

您可能还希望添加PWD以包含path,因为那里的相对路径是相对于.c文件的目录的,并且您可能并不总是将它们都放在同一个目录中


在一篇评论中,你提到了一些关于不能使用绝对路径的事情。。。不确定你的意思是什么,但是一个解决办法是不要使用阴影构建,这是没有问题的,只要你记得在更改构建类型时进行完全重建。如果您使用的是Qt Creator,您可以在“项目”视图下找到每种生成类型的项目生成设置,并且这里有一个阴影生成复选框。

Hmm。。我对Windows构建环境、Qt和SDL一点也不熟悉,但这里有两个想法:如果指定-l标志,类UNIX系统上的编译器gcc将在库路径中查找lib.ext文件。您的SDL.lib与该模式不匹配。第二个:.lib是,iirc,一个静态库扩展。您是否尝试过简单地指定LIBS+=SDL/lib/x86/SDL2.lib,而不使用任何-l或-l标志?我尝试过,但没有这样的文件或目录。我认为这个标志意味着路径是相对的。我不能使用绝对路径,因为我遇到了授权问题。我不确定构建主管,我不习惯Qt,我很少去研究类似于bat的事情。我没有碰它,所以如果默认值是好的,我就好了。好消息是它似乎有效!至少它可以编译。程序崩溃,没有输出,也没有错误消息,但我不认为它来自同一个问题,除非使用错误的库会导致它。好吧,现在Qt快疯了。我一直在尝试我一直在做的事情,现在Qt没有给我任何编译器错误,它只是启动和崩溃。当我尝试在调试模式下启动时,我得到一个错误窗口,显示启动期间程序退出,代码为0xc0000135。我需要为此创建一个新主题吗?可能有助于解决该错误代码:找不到某些DLL。除了正常Qt DLL之外,您还有其他DLL吗?您确定SDL2库是静态库吗?如果您有一个SDL2 DLL,那么您可以通过手动将其复制到同一目录并使用exe进行快速测试—这不是一个合适的解决方案,只是为了测试是否缺少该DLL。如果是那个DLL,那么您可以详细地展开这个问题。如果不是,那么你可能应该问一个新问题。
LIBS += -L SDL/lib/x86/ -lSDL2.lib
LIBS += $${PWD}/SDL/lib/x86/SDL2.lib