2014-11-12 25 views
5

Ho creato librerie statiche taglib per Windows come segue. Gotto usa mingw, non VS.Errore di collegamento con taglib su Windows

  1. Partenza git clone https://github.com/taglib/taglib.git git_taglib
  2. Installato cmake con installer Win32 da cmake.org
  3. Configura cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=/C/taglib_package -DCMAKE_C_COMPILER=/C/MinGW4.4/bin/gcc.exe -DCMAKE_CXX_COMPILER=/C/MinGW4.4/bin/g++.exe -DENABLE_STATIC=ON -DENABLE_STATIC_RUNTIME=ON -DHAVE_ZLIB=0
  4. Compile mingw32-make.exe
  5. Installare mingw32-make.exe install al C:\taglib_package

Nel mio progetto Qt, ho sto usando questa libreria come così

.pro

INCLUDEPATH+="C:/taglib_package/include/taglib" 
QMAKE_LIBDIR += "C:/taglib_package/lib" 
LIBS+= -lz -ltag 

cpp

#include "fileref.h" 
#include "taglib.h" 
... 
TagLib::FileRef f("Z:/Documents/sample.mp3"); 
TagLib::String artist = f.tag()->artist(); 
std::cout<< "Artist is " << artist << std::endl; 

Questo porta alla seguente errore di collegamento

release/main.o:main.cpp:(.text+0x93): undefined reference to `_imp___ZN6TagLib8FileNameC1EPKc' 
release/main.o:main.cpp:(.text+0xb3): undefined reference to `_imp___ZN6TagLib7FileRefC1ENS_8FileNameEbNS_15AudioProperties9ReadStyleE' 
release/main.o:main.cpp:(.text+0xdf): undefined reference to `_imp___ZNK6TagLib7FileRef3tagEv' 
release/main.o:main.cpp:(.text+0x101): undefined reference to `_imp___ZN6TagLib6StringD1Ev' 
release/main.o:main.cpp:(.text+0x10a): undefined reference to `_imp___ZN6TagLib7FileRefD1Ev' 
release/main.o:main.cpp:(.text+0x210): undefined reference to `_imp___ZN6TagLib7FileRefD1Ev' 
release/main.o:main.cpp:(.text+0x2bd): undefined reference to `_imp___ZN6TagLib6StringD1Ev' 
collect2: ld returned 1 exit status 
mingw32-make[1]: *** [release\taglib_experiment.exe] Error 1 
mingw32-make: *** [release] Error 2 
19:56:21: The process "C:\MinGW4.4\bin\mingw32-make.exe" exited with code 2. 
Error while building/deploying project taglib_experiment (kit: Desktop) 
When executing step 'Make' 

Il codice funziona bene su un Mac. Quindi suppongo che il colpevole sia la lib. Come dovrei compilare la libreria per risolvere l'errore di collegamento sopra riportato?

+0

Hi @S B. Penso che sto avendo un problema simile come quella che si aveva [qui: errore di collegamento con taglib su Windows] (http://stackoverflow.com/questions/26889486/linking-error-with-taglib-on-windows). Vi prego di dare un'occhiata alla mia domanda [qui: Come includere una biblioteca in un progetto Qt] (http://stackoverflow.com/questions/40672127/how-to-include-a-library-in-a- qt-project) e vedi se puoi aiutare? È un problema [TagLib 1.11.1.] (Http://taglib.org/#windows). Sarebbe davvero utile se aiutassi con qualche input. Grazie in anticipo. –

risposta

2

Utilizzare l'interruttore -DTAGLIB_STATIC quando si compila il codice

+1

Ha funzionato per me, la libreria è stata effettivamente compilata in modalità statica, quindi è stato necessario utilizzare -DTAGLIB_STATIC per utilizzarlo in questo modo. – Ale