我已经编译了从'官方'mercurial存储库获得的最新SDL2库,并按照Ubuntu / Linux构建的说明进行了编译。
但是Qt创建者无法链接静态构建的库。这是qmake脚本:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
unix:!macx: LIBS += -L/usr/local/lib/libSDL2.a
INCLUDEPATH += /usr/local/include
SOURCES += main.cpp
链接器报告几个未定义的引用,包括SDL_Init
。
答案 0 :(得分:3)
您必须将LIBS行更改为:
LIBS += -L/usr/local/lib -lSDL2
as -L
允许您定义链接器查找要链接的库的路径,而-l
定义要链接到的库。在Unix系统上,名为ASD
的库由libASD.so
文件表示(在此示例中.so
用于共享库,在您的情况下有.a
,因为它是静态库)。
修改强>:
我准备了非常简单的main.cpp
:
#include <SDL/SDL.h>
int main()
{
SDL_Init(SDL_INIT_VIDEO);
return 0;
}
将SDL 2.0.3构建为具有/usr/local
前缀的静态库,我需要在我的.pro
文件中添加2个其他库来编译它。这是:
TEMPLATE = app
CONFIG += console
CONFIG -= qt
CONFIG -= app_bundle
SOURCES += main.cpp
LIBS += -L/usr/local/lib -lSDL2 -ldl -lpthread
INCLUDES += /usr/local/include
现在它完美地编译。