6

我在我的 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 库。谢谢。

4

3 回答 3

3

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

好的,这是我的 Taglib.pro 和我的 project.pro 的摘录:https ://gist.github.com/449ea81ce92f52399f41 。去看一下。我的 Taglib 可能有点过时了,所以请注意,您可能拥有的一些文件可能会在那里丢失。还要注意相对路径。它们都与 .pro 文件相关。

我刚刚cmake .在 taglib 目录中运行。这应该导致 aconfig.h和 ataglib_config.h

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

于 2010-10-07T09:35:45.273 回答
2

博客文章详细介绍了此线程中描述的整个过程。

博文作者 Joel 非常乐意提供为 windows 编译的 taglib 3.6.3 的二进制文件。

于 2011-05-05T17:41:49.023 回答
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} 很重要。希望对某人有所帮助。

于 2012-08-17T16:11:20.797 回答