Tengo un tiempo extremadamente difícil para compilar y usar TagLib 1.6.3 en mi proyecto de Qt. He intentado todo lo que puedo pensar. TagLib afirma que es compatible a través de CMake, pero no estoy teniendo suerte. Además, estoy confundido sobre qué tipos de archivos necesito para mis Qt libs.Compilación de bibliotecas estáticas de TagLib 1.6.3 para Windows
He creado * .a archivos, * .lib y * .dll. Por lo que entiendo hasta ahora ... Creo que dado que estoy trabajando en Windows * .lib es lo que quiero. No importa lo que haga, siempre termino con "referencias indefinidas" a cualquier función de TagLib que trato de usar cuando intento compilar mi proyecto de Qt. He probado MinGW32, MSYS, Visual Studio 2008 e incluso compilación cruzada para Windows en Linux. Todo no aparece nada.
Lo que tiene aún menos sentido para mí es que si compilo la misma fuente de TagLib con Qt en Mac (¿g ++ creo?) ¡Funciona bien! En alguna parte de mis procedimientos de compilación de Windows tengo que estar yendo mal. He estado golpeando mi cara en mi escritorio probablemente durante unas 30 (horas de encendido y apagado) tratando de resolver esto.
Dado que Qt usa minGW, ¿debo compilar TagLib con el mismo compilador?
Si compilo * .lib con Visual Studio, ¿no son compatibles?
¿Las bibliotecas * .a se pueden usar incluso en Windows? (suponiendo minGW)
Todavía estoy tratando de manejar estas cosas en C++, pero después de leer innumerables temas en el foro y otras preguntas, todavía me estoy quedando corto. Aquí es lo que he estado trabajando con CMake en la actualidad ...
cmake -G "MinGW Makefiles" -DENABLE_STATIC=ON -DHAVE_ZLIB=0 -DWITH_MP4=1 -DMAKE_TAGLIB_LIB=1
cmake --build ./
Esto genera un único archivo .a * de ~ 2 MB de tamaño. La biblioteca de trabajo en Mac era ~ 3MB, y la * .lib de Visual Studio era ~ 4MB en modo Release. Por favor, alguien, sálvame de esta locura de línea de comando de C++ plataforma cruzada porque estoy al final de mi ingenio. Probablemente incluso le pagaría por compilar algunas bibliotecas%! $ # & ing. Gracias.
Esta es una gran información para tener, gracias. En el pasado, he estado destruyendo todos los archivos * .h en un directorio para mi INCLUDEPATH para que sea más fácil de administrar. ¿Es esto incorrecto? Además, no he incluido DEPENDPATH porque no sabía que lo necesitaba. – jocull
Para ser sincero, no estoy seguro de si necesitas DEPENDPATH, pero tampoco me duele. Ya que TagLib depende de las rutas de inclusión adecuadas, ¡destruir todos los archivos .h en un solo directorio no es una buena idea, pero no es el origen de su problema de vinculador! – WolfgangA
No estoy 100% seguro de esto: está compilando TagLib como una biblioteca compartida, pero su enlazador se queja de algunos símbolos. ¡Asegúrate de que tu enlazador sepa que los símbolos de TagLib están _dynamically_ cargados, no _statically_! Asegúrese de ** no ** haber definido 'TAGLIB_STATIC' ** ni **' MAKE_TAGLIB_LIB' al compilar su programa. Lea 'taglib_export.h' con cuidado ya que este archivo es el punto fundamental para exportar o importar símbolos. – WolfgangA