未定义的引用SDL_Init与Qt
undefined reference SDL_Init with Qt
我已经经历了类似的问题,但没有一个能解决我的问题。因此,我试图在Qt Widget中使用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();
}
这是专业文件:
#-------------------------------------------------
#
# Project created by QtCreator 2014-10-08T22:37:55
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MapEditor
TEMPLATE = app
SOURCES += main.cpp
mainview.cpp
HEADERS += mainview.h
FORMS += mainview.ui
INCLUDEPATH += SDL/include/
LIBS += -L SDL/lib/x86/SDL2.lib
根据我读到的其他答案,问题似乎来自图书馆的链接。我以前从未真正使用过这个文件或其他qmake,所以我不确定我使用的路径。我在windows上工作,根据这篇文章,我应该写完整的路径,但后来我遇到了访问授权问题(该死的windows)。此外,将路径更改为false似乎不会让编译器感到不安。然而,当我尝试使用时
LIBS += -L SDL/lib/x86/ -lSDL2.lib
编译器找不到该文件。我使用的编译器是一个32位的MinGW,所以我已经在lbsdb.org上下载了相应的文件,并且我尝试了所有子文件夹上的库(x86_64,i686,…),但都不起作用。
很抱歉,如果我的写作方式很奇怪,我是法国人。
当您有一个.lib文件时,最简单的方法是为链接器添加文件。您的项目似乎有它的子目录,但您可能使用了一个单独的构建目录(正如您应该使用的),所以问题可能是这样的。要修复,请使用PWD
qmake变量:
LIBS += $${PWD}/SDL/lib/x86/SDL2.lib
您可能还想添加PWD
以包含路径,因为那里的相对路径是相对于.c文件的目录的,并且您可能并不总是将它们都放在同一目录中。
在一条评论中,你提到了一些关于不能使用绝对路径的事情。。。不知道你的意思是什么,但一个解决办法是不使用影子构建(这没问题,只要你记得在更改构建类型时进行完全重建)。如果您使用的是Qt Creator,您可以在Projects视图下找到每个构建类型的项目构建设置,并且有一个阴影构建复选框。
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用Qt C++计算类似Git的SHA1哈希
- GCC对可能有效的代码抛出init list生存期警告
- Qt focusObjectChanged example?
- 如何在cpp文件之间切换窗口?在Qt中
- Qt和C++:将QLineEdit添加到QTabWidget中
- 从数据库实时显示QT c++中的数据
- Qt Quick-如何仅从c++代码与qml属性交互
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 如何在Qt中取消捕获字符串
- Qt SQLite没有查询或参数计数不匹配