【发布时间】:2014-10-17 04:18:00
【问题描述】:
我已经解决了与我类似的问题,但没有一个能解决我的问题。 所以我尝试在 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();
}
这是 .pro 文件:
#-------------------------------------------------
#
# 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 上工作,根据this article,我应该编写完整路径,但后来我遇到了访问授权问题(该死的 Windows)。 此外,将路径更改为错误的路径似乎不会让编译器感到不安。 但是,当我尝试使用时
LIBS += -L SDL/lib/x86/ -lSDL2.lib
编译器找不到文件。 我正在使用的编译器是 MinGW 32 位,所以我已经在 lbsdb.org 上下载了相应的文件,并且我已经尝试了非常子文件夹中的每个库(x86_64,i686,...)但没有一个工作.
如果我的写作方式很奇怪,很抱歉,我是法国人。
【问题讨论】:
-
Hmm.. 我对 Windows 构建环境、Qt 和 SDL 都不熟悉,但这里有两个想法:如果您指定
-l<libname>标志,编译器(类似 gcc类 UNIX 系统)将在库路径中查找lib<libname>.ext文件。您的SDL.lib与该模式不匹配。第二:.lib是 iirc,一个静态库扩展。您是否尝试过简单地指定LIBS += SDL/lib/x86/SDL2.lib,而不使用任何-l或-L标志? -
我试过了,我得到“没有这样的文件或目录”。我认为标志意味着路径是相对的。而且我不能使用绝对路径,因为我遇到了授权问题。