[英]Using TagLib in Visual Studio 2010
編輯:是的,我看過這篇文章。 不幸的是,看起來用戶最終還是使用了 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位有一個選項,我不選這個選項)。 我希望它們是 static 庫,所以我啟用 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++ > 預處理器 > 預處理器定義)“呼?好麻煩!現在讓我們看看它是否有效?”
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構建TagLib 1.7。
我的腳步
從http://zlib.net/下載zlib來源
將VC ++目錄設置為zlib源和bin
從http://developer.kde.org/~wheeler/taglib.html下載TagLib 1.7
提取taglib-1.7目錄
使用命令提示符運行-taglib-1.7目錄中的cmake -G“ Visual Studio 10”
打開並構建taglib.sln
.dll和lib文件轉到/taglib-1.7/taglib/Debug和/taglib-1.7/taglib/Release
使用CMake gui會引發ZLIB錯誤,並手動添加zlib目錄和lib將生成Visual Studio解決方案,但不會生成.dll文件(鏈接錯誤)
問題是__clrcall
。 您沒有提到您的項目是C ++ / CLI,但這是一個非常重要的細節。
人們已經與其他庫(例如Oracle DB)碰到了這一點 。
#pragma managed(push, off)
#include "taglib.h"
#pragma managed(pop)
讓Visual C ++知道taglib是本機代碼。
例子
#define TAGLIB_STATIC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.