简体   繁体   English

如何在Qt项目中包含库

[英]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编译了TagLibzlib ,并使用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 Studiogcc具有不同的ABI ,因此gcc无法看到Visual的符号。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM