РЕДАКТИРОВАТЬ: Да, я посмотрел на этот пост . К сожалению, похоже, что пользователь в конечном итоге использует MingW.
Я на Windows 7 , 64-разрядная. Я загрузил самую последнюю версию кода TagLib из репозитория SVN. Я использую ревизию 1202935 .
Я пытаюсь использовать TagLib в Visual Studio 2010 . Я получил TagLib для работы с QtCreator / MingW, но я хочу начать изучать Windows API, поэтому я начинаю с нуля в Visual Studio 2010 (конечно, C ++).
В VS2010 я собрал zlib (статически и динамически) и TagLib с zlib и без (статически и динамически). Другими словами, я перепробовал все, что мог придумать, чтобы заставить это работать.
Моя идеальная ситуация заключается в том, что я использую CMake для генерации файлов проекта VS2010 (есть опция для 64-битной VS2010. Я не выбираю эту опцию) для TagLib. Я хотел бы, чтобы они были статическими библиотеками, поэтому я включаю ENABLE_STATIC, а также WITH_ASF и WITH_MP4. Я также направляю TagLib в zlib, используя ZLIB_INCLUDE_DIR и ZLIB_LIBRARY (я ссылаюсь на файл zlib.lib, который я ранее построил с использованием VS2010). Обратите внимание, я использую графический интерфейс CMake.
Затем я открываю сгенерированные файлы проекта в 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()));
Затем я закомментирую строки 436 и 437 в mpegfile.cpp , потому что Я думаю, что это ошибка .
// 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)
Может кто-нибудь еще попробовать, что я здесь делаю, и указать на мою ошибку? Я пытался предоставить достаточно информации, чтобы вы могли увидеть, что происходит.
Спасибо за чтение!