[英]How to include a library in a Qt project
I'm trying to create a project that uses the TagLib library. 我正在尝试创建一个使用TagLib库的项目。 I'm not really sure of how exactly to go about it. 我不太确定该怎么做。
I have downloaded TagLib 1.11.1 . 我已经下载了TagLib 1.11.1 。
I built it as follows: 我将其构建如下:
Build zlib, by first having CMake create a Visual Studio solution file, then building this solution with Visual Studio: 通过首先让CMake创建一个Visual Studio解决方案文件,然后使用Visual Studio构建此解决方案来构建zlib:
mkdir build && cd build cmake .. -G"Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX="e:\\workspace\\lib\\installed" msbuild /P:Configuration=Debug INSTALL.vcxproj msbuild /P:Configuration=Release INSTALL.vcxproj mkdir build && cd build cmake .. -G“ Visual Studio 14 2015 Win64” -DCMAKE_INSTALL_PREFIX =“ e:\\ workspace \\ lib \\ installed” msbuild / P:Configuration = Debug INSTALL.vcxproj msbuild / P:Configuration = Release INSTALL.vcxproj
Build TagLib much in the same way: 以相同的方式构建TagLib:
cd ....\\taglib-1.11.1 mkdir build && cd build cmake .. -G"Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX="e:\\workspace\\lib\\installed" -DZLIB_INCLUDE_DIR="e:\\workspace\\lib\\installed\\include" -DZLIB_LIBRARY="e:\\workspace\\lib\\installed\\lib\\zlib.lib" -DWITH_ASF=on -DWITH_MP4=on -DBUILD_EXAMPLES=on msbuild /P:Configuration=Release INSTALL.vcxproj cd .... \\ taglib-1.11.1 mkdir构建&& cd构建cmake .. -G“ Visual Studio 14 2015 Win64” -DCMAKE_INSTALL_PREFIX =“ e:\\ workspace \\ lib \\ installed” -DZLIB_INCLUDE_DIR =“ e:\\ workspace \\ lib \\ installed \\ include“ -DZLIB_LIBRARY =” e:\\ workspace \\ lib \\ installed \\ lib \\ zlib.lib“ -DWITH_ASF = on -DWITH_MP4 = on -DBUILD_EXAMPLES = on msbuild / P:Configuration =发布INSTALL.vcxproj
I create a simple Qt Console Application: 我创建一个简单的Qt Console应用程序:
I then add tag.lib
from the TagLib Build above in E:\\workspace\\lib\\installed\\lib
using Qt 然后,我使用Qt从E:\\workspace\\lib\\installed\\lib
上述TagLib构建中添加tag.lib
Qt -> Add Library -> Library Type (External Library) -> ....... Qt->添加库->库类型(外部库) -> .......
main.cpp : main.cpp:
#include <QCoreApplication>
#include <QDebug>
#include <taglib/fileref.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TagLib::FileRef f("D:/Dire Straits - Sultans of Swing.mp3");
return a.exec();
}
taglibtest.pro taglibtest.pro
QT += core
QT -= gui
CONFIG += c++11
TARGET = taglibtest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltag
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltagd
else:unix: LIBS += -L$$PWD/taglib/builds/ -ltag
INCLUDEPATH += $$PWD/taglib/builds
DEPENDPATH += $$PWD/taglib/builds
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltag
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltagd
else:unix: LIBS += -L$$PWD/taglib/builds/ -ltag
INCLUDEPATH += $$PWD/taglib/builds
DEPENDPATH += $$PWD/taglib/builds
HEADERS += \
taglib/aifffile.h \
taglib/aiffproperties.h \
taglib/apefile.h \
taglib/apefooter.h \
taglib/apeitem.h \
taglib/apeproperties.h \
taglib/apetag.h \
taglib/asfattribute.h \
taglib/asffile.h \
taglib/asfpicture.h \
taglib/asfproperties.h \
etc....
etc....
I get the following errors whenever I try Building the project in Qt: 每当我尝试在Qt中构建项目时,都会出现以下错误:
F:\taglibtest\main.cpp:-1: error: undefined reference to `_imp___ZN6TagLib8FileNameC1EPKc'
F:\taglibtest\main.cpp:-1: error: undefined reference to `_imp___ZN6TagLib7FileRefC1ENS_8FileNameEbNS_15AudioProperties9ReadStyleE'
F:\taglibtest\main.cpp:-1: error: undefined reference to `_imp___ZN6TagLib7FileRefD1Ev'
F:\taglibtest\main.cpp:-1: error: undefined reference to `_imp___ZN6TagLib7FileRefD1Ev'
:-1: error: release/main.o: bad reloc address 0x0 in section `.ctors'
:-1: error: final link failed: Invalid operation
collect2.exe:-1: error: error: ld returned 1 exit status
What should I do to fix this and get working with TagLib? 我应该怎么做才能解决此问题并开始使用TagLib?
taglibtest.pro taglibtest.pro
QT += core
QT -= gui
CONFIG += c++11
TARGET = taglibtest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltag
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltagd
else:unix: LIBS += -L$$PWD/taglib/builds/ -ltag
INCLUDEPATH += $$PWD/taglib/builds
DEPENDPATH += $$PWD/taglib/builds
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltag
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/taglib/builds/ -ltagd
else:unix: LIBS += -L$$PWD/taglib/builds/ -ltag
INCLUDEPATH += $$PWD/taglib/builds
DEPENDPATH += $$PWD/taglib/builds
HEADERS += \
taglib/aifffile.h \
taglib/aiffproperties.h \
taglib/apefile.h \
taglib/apefooter.h \
taglib/apeitem.h \
taglib/apeproperties.h \
taglib/apetag.h \
taglib/asfattribute.h \
taglib/asffile.h \
taglib/asfpicture.h \
taglib/asfproperties.h \
etc....
etc....
You have compiled TagLib
and zlib
with Visual Studio
and you compile your project with mingw
(at least that's what I can guess from error messages). 您已经使用Visual Studio
编译了TagLib
和zlib
,并使用mingw
编译了您的项目(至少我可以从错误消息中猜到)。 This won't work. 这行不通。 You need to compile all your libraries and apps with the very same compiler. 您需要使用完全相同的编译器来编译所有库和应用程序。
Visual Studio
and gcc
have different ABI
's so gcc
cannot see Visual
's symbols. Visual Studio
和gcc
具有不同的ABI
,因此gcc
无法看到Visual
的符号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.