【发布时间】:2010-12-10 22:40:17
【问题描述】:
编辑:是的,我看过this post。不幸的是,看起来用户最终还是使用了 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));
mpegheader.cpp 第 171 行:
std::bitset<32> flags(static_cast<unsigned long long>(data.toUInt()));
然后我将 mpegfile.cpp 中的第 436 行和第 437 行注释掉,因为 I think it's a bug.
// ID3v2Tag(true);
// ID3v1Tag(true);
然后我在发布模式下构建项目。它构建得很好。没有错误(虽然有一堆警告)。
所以我生成了 tag.lib。然后我创建了一个测试 VS2010 项目/解决方案来使用 TagLib。
这是我使用 TagLib 的唯一行。请注意,只是一个测试。
TagLib::MPEG::File a("tests/other/blank.mp3");
- 我将
TAGLIB_STATIC添加到所有配置(发布和调试版本)的预处理器选项(Property Pages > Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions) - 我将每个该死的头目录添加到 Property Pages > Configuration Properties > C/C++ > General > Additional Include Directories
- 最后,我按此顺序将 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)
其他人可以试试我在这里做什么并指出我的错误吗?我试图提供足够的信息让大家看看发生了什么。
感谢阅读!
【问题讨论】:
标签: visual-studio-2010 visual-c++ c++-cli static-libraries taglib