编辑:是的,我看过这篇文章。不幸的是,看起来用户最终还是使用了 MingW。
我在Windows 7,64位。我从 SVN 存储库下载了最新版本的 TagLib 代码。我正在使用修订版1202935。
我正在尝试在Visual Studio 2010中使用 TagLib 。我已经让 TagLib 与 QtCreator/MingW 一起工作,但我想开始学习 Windows API,所以我在 Visual Studio 2010(当然是 C++)中从头开始。
在 VS2010 中,我构建了 zlib(静态和动态)和带有和不带 zlib(静态和动态)的 TagLib。换句话说,我已经尝试了我能想到的一切来让它发挥作用。
我的理想情况是我使用CMake为TagLib生成VS2010项目文件(VS2010 64位有一个选项。我不选择这个选项)。我希望它们是静态库,所以我启用了 ENABLE_STATIC,并启用了 WITH_ASF 和 WITH_MP4。我还使用 ZLIB_INCLUDE_DIR 和 ZLIB_LIBRARY 将 TagLib 指向 zlib(我正在链接到我之前使用 VS2010 构建的 zlib.lib 文件)。注意,我使用的是 CMake GUI。
然后,我在 VS2010 中打开生成的项目文件并对代码进行三处更改,以便它在 Visual Studio 2010 中构建而不会出现错误(我将修复程序放在这里以供与我遇到相同问题的其他人使用)。
apefooter.cpp 第 192 行:
std::bitset<32> flags(static_cast<unsigned long long>(data.mid(20, 4).toUInt(false)));
mpcproperties.cpp在第 116 行:
std::bitset<32> flags = static_cast<unsigned long long>(d->data.mid(8, 4).toUInt(false));
第 171 行的mpegheader.cpp:
std::bitset<32> flags(static_cast<unsigned long long>(data.toUInt()));
然后我在mpegfile.cpp中注释掉第 436 和 437 行,因为我认为这是一个错误。
// ID3v2Tag(true);
// ID3v1Tag(true);
然后我在发布模式下构建项目。它构建得很好。没有错误(尽管有一堆警告)。
所以我生成了 tag.lib。然后我创建了一个测试 VS2010 项目/解决方案来使用 TagLib。
这是我使用 TagLib 的唯一行。只是一个测试,请注意。
TagLib::MPEG::File a("tests/other/blank.mp3");
- 我为所有配置(发布和调试版本)添加
TAGLIB_STATIC
了预处理器选项(属性页 > 配置属性 > C/C++ > 预处理器 > 预处理器定义) - 我将每个该死的头目录添加到属性页 > 配置属性 > C/C++ > 常规 > 附加包含目录
- 最后,我将 zlib.lib 和 tag.lib 添加到附加依赖项(属性页>配置属性>链接器>输入>附加依赖项)中
“呼!真是麻烦!现在让我们看看它是否有效?”
1>vs_taglib_test.obj : error LNK2028: unresolved token (0A00001A) "public: virtual __clrcall TagLib::MPEG::File::~File(void)" (??1File@MPEG@TagLib@@$$FUAM@XZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
1>vs_taglib_test.obj : error LNK2028: unresolved token (0A00001B) "public: __clrcall TagLib::MPEG::File::File(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (??0File@MPEG@TagLib@@$$FQAM@VFileName@2@_NW4ReadStyle@AudioProperties@2@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
1>vs_taglib_test.obj : error LNK2019: unresolved external symbol "public: virtual __clrcall TagLib::MPEG::File::~File(void)" (??1File@MPEG@TagLib@@$$FUAM@XZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
1>vs_taglib_test.obj : error LNK2019: unresolved external symbol "public: __clrcall TagLib::MPEG::File::File(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (??0File@MPEG@TagLib@@$$FQAM@VFileName@2@_NW4ReadStyle@AudioProperties@2@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
其他人可以试试我在这里做什么并指出我的错误吗?我试图提供足够的信息让大家看看发生了什么。
谢谢阅读!