为Windows编译静态TagLib 1.6.3库

时间:2010-10-07 05:15:51

标签: c++ windows qt cmake taglib

我在Qt项目中编译和使用TagLib 1.6.3非常困难。我已经尝试了所有我能想到的东西。 TagLib声称它是通过CMake支持的,但我没有运气。此外,我对我的Qt库甚至需要什么类型的文件感到困惑!

我已经构建了* .a文件,* .lib和* .dll。从我到目前为止的理解...我相信,因为我在Windows * .lib工作是我想要的。无论我做什么,我总是在我尝试编译我的Qt项目时尝试使用的任何TagLib函数的“未定义引用”。我已经尝试过MinGW32,MSYS,Visual Studio 2008,甚至可以在Linux上对Windows进行交叉编译。一切都没有。

对我来说更有意义的是,如果我在Mac上使用Qt编译相同的TagLib源代码(我认为是g ++?)它运行正常!在我的Windows编译过程中,我必须出错。我一直在桌子上砸我的脸,大约30个小时(开启和关闭)小时试图解决这个问题。

由于Qt使用minGW,我必须使用相同的编译器编译TagLib吗?

如果我用Visual Studio编译* .lib是不兼容的?

* .a库甚至可以在Windows中使用吗? (假设minGW)

我仍然试图掌握这些C ++的东西,但在阅读了无数的论坛帖子和其他问题后,我仍然很短暂。以下是我目前在CMake工作的内容......

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

这会生成一个大小约为2MB的* .a文件。 Mac上的工作库大约为3MB,而Visual Studio中的* .lib在发布模式下大约为4MB。请有人救我脱离这个C ++跨平台命令行疯狂,因为我在我的智慧结束。我甚至可能会付钱给你一些%!$#& ing库。感谢。

3 个答案:

答案 0 :(得分:3)

由于Mac适合你,我只是在谈论Win32。

好的,这是我的Taglib.pro和我的project.pro:https://gist.github.com/449ea81ce92f52399f41的摘录。去看一下。我的Taglib可能有点过时,所以要小心,你可能会丢失一些文件。还要照顾相对路径。它们都与.pro文件相关。

我刚刚在taglib目录中运行cmake .。这应该会产生config.htaglib_config.h

当你使用QtCreator和mingw-gcc时,你肯定只需要libTaglib.a。 * .lib是特定于MSVC的!

答案 1 :(得分:2)

blog post详细说明了此主题中描述的整个过程。

博客文章作者Joel非常擅长提供为Windows编译的binaries of taglib 3.6.3

答案 2 :(得分:1)

我在我的项目中使用cmake。这是我制作的使用taglib的媒体播放器的cmake文件。我将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}很重要。 希望能帮助别人。