How to include a library in a Qt project

I am trying to create a project that uses the TagLib library. I'm not quite sure how to do this.

I downloaded TagLib 1.11.1 .

I built it as follows:

Create a zlib by first creating a CMake file to create a Visual Studio solution file, then creating this solution using Visual Studio:

mkdir build && & & cd build cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX = "e: \ workspace \ lib \ installed" msbuild / P: Configuration = Debugging INSTALL.vcxproj msbuild / P: Configuration = Release INSTALL. vcxproj

Create TagLib in the same way:

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

I am creating a simple Qt console application:

enter image description here

Then I add tag.lib from the tag.lib assembly above to E:\workspace\lib\installed\lib using Qt

Qt β†’ Add Library β†’ Library Type (External Library) β†’ .......

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

 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.... 

When trying to create a project in Qt, the following errors occur:

 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 work with TagLib?

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.... 
+2
source share
1 answer

You compiled TagLib and zlib using Visual Studio , and you compiled your project using mingw (at least what I can guess from the error messages). This will not work. You need to compile all your libraries and applications using the same compiler.

Visual Studio and gcc have different ABI , so gcc cannot see Visual characters.

0
source

Source: https://habr.com/ru/post/1206725/


All Articles