Компиляция статических библиотек TagLib 1.6.3 для Windows - PullRequest
6 голосов
/ 07 октября 2010

Мне очень сложно компилировать и использовать TagLib 1.6.3 в моем проекте Qt.Я перепробовал все, что мог придумать.TagLib утверждает, что он поддерживается через CMake, но мне не повезло.Более того, я не совсем понимаю, какие типы файлов мне нужны для моих библиотек Qt!

Я собрал * .a файлы, * .lib и * .dll.Из того, что я понимаю до сих пор ... Я считаю, что так как я работаю в Windows * .lib это то, что я хочу.Независимо от того, что я делаю, я всегда получаю «неопределенные ссылки» на любые функции TagLib, которые я пытаюсь использовать, когда пытаюсь скомпилировать свой проект Qt.Я пробовал MinGW32, MSYS, Visual Studio 2008 и даже кросс-компиляцию для Windows на Linux.Все ничего не получается.

Что еще менее важно для меня, так это то, что если я скомпилирую тот же самый источник TagLib с Qt на Mac (думаю, g ++?), Он будет работать отлично!Где-то в моих процедурах компиляции Windows я должен ошибаться.Я пытаюсь понять это примерно 30 часов (включая и выключая).

Поскольку Qt использует minGW, я должен скомпилировать TagLib с помощью того же компилятора?

Если я скомпилирую * .lib с Visual Studio, они не совместимы?

Можно ли использовать библиотеки * .a в Windows?(предполагая minGW)

Я все еще пытаюсь разобраться с этим материалом C ++, но после прочтения бесчисленных веток форума и других вопросов, я все еще не отвечаю.Вот то, с чем я сейчас работаю в CMake ...

cmake -G "MinGW Makefiles" -DENABLE_STATIC=ON -DHAVE_ZLIB=0 -DWITH_MP4=1 -DMAKE_TAGLIB_LIB=1
cmake --build ./

Это генерирует один * .a файл размером ~ 2 МБ.Рабочая библиотека на Mac была ~ 3 МБ, а * .lib от Visual Studio была ~ 4 МБ в режиме выпуска.Пожалуйста, кто-нибудь, спасите меня от этого безумия кросс-платформенной командной строки C ++, потому что я нахожусь в тупике.Я бы, вероятно, даже заплатил бы вам за то, что вы просто скомпилировали мне несколько библиотек%! $ # & Ing.Спасибо.

Ответы [ 3 ]

3 голосов
/ 07 октября 2010

Поскольку Mac работает на вас, я просто говорю о Win32.

Хорошо, это мой Taglib.pro и выдержка из моего project.pro: https://gist.github.com/449ea81ce92f52399f41. Проверьте их. Мой Taglib может быть немного устаревшим, поэтому будьте осторожны, там могут отсутствовать некоторые файлы, которые у вас могут быть. Также позаботьтесь об относительных путях. Все они относятся к .pro-файлу.

Я только что запустил cmake . в каталоге taglib. Это должно привести к config.h и taglib_config.h

Вам определенно нужен libTaglib.a, только когда вы используете QtCreator и mingw-gcc. * .lib специфичен для MSVC!

2 голосов
/ 05 мая 2011

Это сообщение в блоге подробно описывает весь процесс, описанный в этой теме.

Автор поста в блоге, Джоэл, был достаточно хорош, чтобы предоставить двоичные файлы taglib 3.6.3 скомпилировано для windows.

1 голос
/ 17 августа 2012

Я использую cmake для своих проектов. Вот мой файл cmake для созданного мной медиаплеера, использующего taglib.Я установил taglib в / usr / local / (таким образом мне не нужно ничего менять при компиляции в Linux).Важные части имеют стрелку.

project(qtmu3)
find_package(Qt4 REQUIRED)
-> find_library(TAGLIB_LIB tag PATH /usr/local/lib/)
set(QT_USE_PHONON TRUE)
set(QTMU_SRCS main.cpp mainwindow.cpp WidgetMarqueeLabel.cpp single_application.cpp)
set(QTMU_MOC_HDRS mainwindow.h WidgetMarqueeLabel.h single_application.h)
set(QTMU_UI_FILES mainwindow.ui)
set(QTMU_RSRC_FILES myresources.qrc)
-> include_directories(/usr/local/include/taglib/)
set(CMAKE_CXX_FLAGS "-mwindows")
include(${QT_USE_FILE})
QT4_WRAP_UI( QTMU_UI_HDRS ${QTMU_UI_FILES})
QT4_WRAP_CPP( QTMU_MOC_SRCS ${QTMU_MOC_HDRS})
QT4_ADD_RESOURCES(QTMU_RSRC_SRCS ${QTMU_RSRC_FILES})
INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} )
ADD_EXECUTABLE(qtmu3 ${QTMU_SRCS} ${QTMU_MOC_SRCS} ${QTMU_RSRC_SRCS} ${QTMU_UI_HDRS})
-> TARGET_LINK_LIBRARIES(qtmu3 ${QT_LIBRARIES} ${TAGLIB_LIB}) 

Последняя, ​​только $ {TAGLIB_LIB}, важна.надеюсь, что это поможет кому-то.

...