我正在编译和使用TagLib 1.6.3在我的Qt项目中超级困难。 我尝试了所有我能想到的。 TagLib声称,它是通过CMake支持,但我没有任何运气。 此外,我对我甚至需要的Qt库有什么样的文件感到困惑!
我build立了* .a文件,* .lib和* .dll。 从我了解到目前为止…我相信,因为我在Windows * .lib工作是我想要的。 无论我做什么,当我尝试编译我的Qt项目时,总会遇到“尝试使用的任何TagLib函数”的“未定义引用”。 我已经尝试过MinGW32,MSYS,Visual Studio 2008,甚至在Linux上进行交叉编译。 一切都没有了。
对我来说更没有意义的是,如果我在Mac上用Qt编译相同的TagLib源代码(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 ./
这会生成大小为〜2MB的单个* .a文件。 Mac上的工作库为〜3MB,Visual Studio的* .lib在Release模式下为〜4MB。 请有人救我从这个C + +跨平台命令行疯狂,因为我在我的智慧结束。 我甚至可能会付钱给你编译一些%!$#库。 谢谢。
由于Mac为你工作,我只是在谈论Win32。
好的,这是我的Taglib.pro和我的project.pro的摘录: https ://gist.github.com/449ea81ce92f52399f41。 去看一下。 我的Taglib可能有点过时了,所以要注意,有些文件可能会丢失。 还要照顾相对路径。 他们都是相对于.pro文件。
我只是跑cmake .
在taglib目录中。 这应该导致一个config.h
和一个taglib_config.h
当你使用QtCreator和mingw-gcc时,你肯定只需要libTaglib.a
。 * .lib是MSVC特定的!
此博客文章详细介绍了此主题中描述的整个过程。
博客作者Joel很好地提供了为Windows编译的taglib 3.6.3的二进制文件 。
我为我的项目使用cmake.Here是我制作的使用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}很重要。 希望能帮助别人。