- Создание аудиоплагинов, часть 3
- VST и AU
- Отладка в Xcode
- Отладка в Windows
- Блокировка предупреждений для кода библиотек на Mac
- Блокировка предупреждений кода библиотек в Windows
- Создание аудиоплагинов, часть 1
- Введение
- Как мы это сделаем
- Что нам понадобится
- Полезные ресурсы
- Установка и настройка WDL-OL
- Настройка на Mac OS X с использованием Xcode 4
- Загрузка WDL-OL
- Добавление зависимостей
- Установка SDK 10.5
- Запуск тестового проекта
- Проверка версии AudioUnit при помощи Logic
- Установка на Windows с использованием Visual C++ 2010 Express
- Возможные проблемы
Создание аудиоплагинов, часть 3
В этом посте мы завершим необходимую настройку среды разработки и подготовим вспомогательное окружение.
VST и AU
В WDL-OL очень просто превратить приложение в VST или AU. Чтобы создать VST на Маке, измените схему: VST2 → My Mac 64-Bit. Нажмите Run. Ошибок быть не должно, но ничего и не запустилось! Откройте Finder и зайдите в
/Library/Audio/Plug-Ins/VST. Там увидите MyFirstPlugin.vst Если папка Library не видна в домашней директории, нажмите Cmd+Shift+G, вставьте указанный путь и жмите Enter.
Следующая секция относится к Mac. Версия для Windows ниже.
Отладка в Xcode
Чтобы запустить плагин, нам нужен хост. Скачайте желательно 64-битную версию REAPER и перетащите его в папку Applications/ Его можно использовать без каких-либо ограничений 60 дней, после этого вас попросят приобрести лицензию (но он продолжит работать). Мы хотим настроить все так, чтобы когда мы жали Run в Xcode, запускался REAPER и отладчик. Мы сможем использовать брейкпоинты так же, как делали это с приложением.
Зайдите в Product → Scheme → Edit Scheme…, выберите Run в списке слева. В подпункте Executable выберите Other. :
Используйте диалоговое окно, чтобы найти REAPER64.app. Должно выглядеть так:
Жмите OK, и снова Run. Запустится REAPER. Чтобы создать в нем новую дорожку для звука, нажмите Cmd+T (Ctrl+T в Windows), и на ней — кнопку FX:
В открывшемся окне введите myfirstplugin, и наш плагин найдется:
Выбирайте, жмите ОК. Он должен появиться. Преимущество использования REAPER в том, что тут мы можем обрабатывать плагином любой звуковой файл и сразу слышать результат. Это намного интереснее, чем все время слушать со входа микрофона. Помимо этого, здесь можно использовать разные другие плагины, в том числе для анализа выходного сигнала нашего плагина. Это пригодится, но попозже.
Скачайте этот файлик и перетяните его на дорожку в REAPER. Поставьте его вплотную к левой границе дорожки. Нажмите пробел, для воспроизведения. Станет слышен низкий звук:
Для удобства было бы хорошо закольцевать звук, чтобы он бесконечно играл, пока снова не нажмем на пробел. Зажмите Cmd (Shift на Windows) и два раза щелкните по файлу на дорожке. Светлым прямоугольником выделится временной диапазон. Нажмите R, чтобы закольцевать его, и запускайте. Покрутите ручку плагина — громкость звука меняется!
При вращении ручки могут быть слышны щелчки. Это из-за того, что мы не интерполируем значения и создаем в сигнале резкие перепады. Теперь нажмите в Xcode Stop, чтобы закрыть REAPER.
Создать AU версию просто: измените таргет на AU. Прежним образом измените схему Run, чтобы запускался REAPER.app, и жмите Run. Плагин скомпилируется и его файл появится в
/Library/Audio/Plug-Ins/Components. Запустится REAPER и можно будет проделать все те же вещи, что и с VST версией.
Все эти запуски, создания треков и закидывания на них плагинов постоянно повторяются. Я предпочитаю оптимизировать подобные вещи. Когда в REAPER все готово (звук закольцован и плагин уже висит на треке), сохраните проект (Cmd+S на Mac и Ctrl+S в Windows) в папку проекта в Xcode (
/plugin-development/wdl-ol/IPlugExamples/MyFirstPlugin/) и назовите reaper-project.RPP.
В окне Edit Scheme выберите VST2 вверху. Затем идите в закладку Arguments и щелкните на плюс под строкой “Arguments Passed On Launch”. Перетяните reaper-project.RPP из папки проекта в новую строчку:
То же самое надо повторить для AU. Если хотите, можно вообще создать отдельный проект для AU версии. Теперь каждый раз REAPER будет запускаться уже со всем барахлом. Здорово!
Если хочется, можно поиграться с брэйкпоинтами и отслеживать значения переменных плагина, даже несмотря на то, что он не запущен непосредственно в Xcode.
Отладка в Windows
Открывайте Explorer и заходите в C:\Program Files. Создайте там новую папку с именем vsthost. Скачайте программку Savihost (нам понадобится savihostx86.zip), разархивируйте и скопируйте файл savihost.exe в эту папку:
В Visual C++ правым щелчком по MyFirstPlugin-vst2 выберите Set as StartUp Project. Жмите F5, плагин запустится в Savihost:
Если ничего не появилось, пощелкайте окошки на панели задач, он должен быть там.
Нужно сделать еще одну вещь: сейчас Savihost ловит все исключения и старается сделать так, чтобы плагин не упал. Это здорово, если мы выступаем на сцене, но сейчас нам нужно его отлаживать. В Visual C++ правым кликом по MyFirstPlugin-vst2 выберите Properties. В открывшемся окне выберите Debugging. Справа к параметрам допишите /noexc /noft , как на картинке (не потеряйте пробелы):
Теперь исключения будут передаваться отладчику Visual C++.
Если попробовать запустить VST3 версию, то может выскочить такое сообщение (не на немецком, наверное):
В VST3 SDK, который мы скачали раньше, в подпапке \bin лежат архивы. В них содержатся установщики, которые создадут необходимые папки для 32 и 64-битных систем (C:\Program Files (x86)\Steinberg\VST3PluginTestHost\ и C:\Program Files\Steinberg\VST3PluginTestHost\ соответственно) и скопируют туда нужные версии файла VST3PluginTestHost.exe. При установке никакие параметры менять не обязательно.
В Windows тоже можно проверить работоспособность плагина в реальных условиях. Будем снова использовать REAPER. Надо подсказать ему, где находится наш плагин. В папке проекта есть подпапка \build-win, в которой, помимо прочего, находятся .dll и .vst файлы плагина. В настройках REAPER Options → Preferences → Plug-Ins → VST можно добавить директории, содержащие эти файлы:
Затем в REAPER создадим проект с нужным билдом нашего плагина (x86/x64), сконфигурируем его, как нам хочется (например, поставим ручки плагина в определённые положения) и сохраним. В Visual Studio в меню Project → Properties пропишем полные пути до reaper.exe и до сконфигурированного .rpp:
В целом, $(VST2_64_HOST_PATH) и ряд других параметров прописан в файле common.props в директории WDL-OL. Не забудьте делать бэкап, прежде чем играться с конфигами.
Если при использовании REAPER в режиме Debug у вас начал вылетать reaper_host32.exe, попробуйте сконфигурировать его, чтобы он подгружал ваш плагин в обход этого процесса, выбрав в настройках Native only, например:
reaper_host32.exe может продолжить вылетать, но перестанет ломать обработку и вывод звука для плагинов, подгруженных в обход него.
Блокировка предупреждений для кода библиотек на Mac
Версия для Windows будет дальше.
Как можно заметить, нам выдается куча предупреждений:
Предупреждения очень полезны, так как обращают наше внимание на возможные проблемы и баги в коде. В данном случае 22 предупреждения относятся к коду используемой нами библиотеки, так что мы не можем просто исправить их, т. к. если когда-нибудь мы загрузим свежую версию этой библиотеки, все исправления придется вносить снова. Но и оставить все как есть тоже не годится: можно легко пропустить 23-ю ошибку, которая будет относиться уже к коду нашего плагина.
На мой взгляд, лучшим решением будет заблокировать эти предупреждения, чтобы когда появляется новое предупреждение, мы знали, что оно имеет отношение к нашему коду. Для этого мы можем использовать флаг компилятора -w . Щелкните в навигаторе на синюю иконку проекта, выберите таргет APP, зайдите в Build Phases и раскройте секцию Compile Sources. Отметьте все строки, кроме MyFirstPlugin.cpp, сделайте двойной щелчок по столбцу Compiler Flags, напечатайте -w и нажмите Enter:
Повторите то же самое для VST2, AU и других нужных таргетов.
Создайте сборку снова. Мы увидим три предупреждения. Validate Project Settings исправить легко: двойной щелчок по нему, затем снять все галочки и щелкнуть Done:
Теперь осталось два предупреждения:
То, которое касается кодировки InfoPlist.strings, можно исправить, открыв файл и конвертировав его в UTF-8 при помощи Utilities справа:
Предупреждение extra tokens убирается дополнением директивы #include в MyFirstPlugin.h:
Теперь в таргетах APP и AU предупреждений нет. А при сборке VST2 выскакивает предупреждение об одном параметре в объявлении функции main. Исправим это дополнением директивы #include в MyFirstPlugin.cpp (не в .h!):
Создайте сборку и убедитесь, что все чисто!
Блокировка предупреждений кода библиотек в Windows
В целом VS C++ выдает другие предупреждения, нежели GCC/LLVM на Маке. Список всех предупреждений VS C++ 2010 находится на этой страничке слева.
Например, если вы видите предупреждения С4101 и С4129 о каком-нибудь файле в библиотеке WDL, их можно игнорировать: допишите #pragma перед #include в MyFirstPlugin.h :
Suppress означает, что предупреждения будут игнорироваться только для следующей строки (то есть для #include ). Так что предупреждения, касающиеся всего остального кода в файле, вы будете получать, а это хорошо. Обратите внимание, что надо писать только номер предупреждения, без «С». То же самое можно проделать и в MyFirstPlugin.cpp:
Это касается файлов .h из библиотеки.
Если вы получаете предупреждения о конкретном .cpp, найдите его в project explorer, по правому щелчку зайдите в Properties, в окне слева выберите C/C++ → Advanced. Справа должна быть опция Disable certain warnings:
Тут можно добавить список номеров предупреждений, разделенных точкой с запятой. Как видите, отладчик уже игнорирует четыре предупреждения для этого файла. Обратите внимание, что данные изменения повлияют только на этот конкретный .cpp файл. Так что надо будет обозначить номера предупреждений для остальных файлов и так же добавить их в соответствующие настройки.
Когда будете создавать новый проект, используйте скрипт duplicate, чтобы не пришлось снова вносить все эти коррективы.
Красотища! Мы разгребли все предупреждения: скрыли лишние и облегчили наблюдения за важными для нас. В следующий раз мы запачкаем руки в написании грязного дисторшена.
Источник
Создание аудиоплагинов, часть 1
Этот пост — первый из серии переводов руководства Мартина Финке о написании собственных аудиоплагинов.
Отличительной особенностью этого материала является отсутствие зависимости от формата плагина и платформы его использования. Внимание сфокусировано на общей структуре аудиоплагина. Затем алгоритмы оборачиваются в слой абстракции для сборки в форматы VST, VST3, AU, RTAS, AAX или в отдельное приложение.
Сам Мартин больше работает на Маке, но руководство содержит и все необходимые шаги для разработки на Windows.
Введение
Аудиоплагины — это программы, которые загружаются в хост (например Ableton Live, Logic или REAPER). Они обрабатывают аудио и\или MIDI данные. У них, как правило, есть GUI (графический пользовательский интерфейс). Вот три примера (U-He Zebra, Sonalksis FreeG и D16 Decimort):
Как видите, в GUI присутствуют элементы управления (чаще всего это какие-нибудь ручки), меняющие то, как плагин обрабатывает входящие данные. Еще есть набор пресетов (предустановок — на скриншотах они называются Combo и Emulator), в которых хранятся положения ручек и других параметров.
Начнем мы с дисторшена — это достаточно простой плагин. После этого мы сделаем вот такой субстрактивный синтезатор, шаг за шагом:
Будем использовать С++ и библиотеку WDL-OL. Она основана на библиотеке Cockos WDL (произносится как «уитл»). Она делает за нас кучу работы, вот самые важные моменты:
- Содержит уже готовые проекты Xcode / Visual Studio
- Создает плагины в форматах VST, AudioUnit, VST3 и RTAS из нашего кода. Просто выбираем формат и жмем запустить!
- Создает 32\64-битные версии
- Запускает ваш плагин как самостоятельное приложение в Windows или MacOS
- Содержит множество разных элементов GUI, которые используются в аудиоплагинах
Также в этой библиотеке есть некоторые часто используемые алгоритмы, например, передискретизация. Вот в этой ветке форума есть много скринов плагинов, написанных при помощи WDL.
Разные форматы плагинов делают более-менее одно и то же. Следовательно, в коде обычно бывает много копипасты. Как программист, вы должны стараться не повторяться, так что рано или поздно вы бы написали свой собственный слой абстракции над разными форматами. Но это уже существует в виде фрэймворка IPlug, являющегося частью WDL. Это самая раздражающая часть процесса разработки, так что теперь мы сможем сфокусироваться на таких интересных штуках, как:
- Обработка аудио и MIDI
- Внешний вид плагина
- Интеграция с хостом (автоматизация, пресеты и прочее)
Еще одна замечательная вещь в WDL это разрешительная лицензия. Библиотеку можно свободно использовать даже в коммерческих продуктах (см. детальную информацию по ссылкам выше).
Как мы это сделаем
«Погоня лучше, чем добыча» — Эйч Пи Бакстер
В программировании результат сам по себе — это уже вознаграждение, но именно по пути к результату мы учимся. В этом руководстве не будет длинных листингов с идеальными решениями. Мы начнем с того, что работает, и будем постепенно развивать это, встречаясь с разными проблемами. Минус в том, что вы будете писать код, который впоследствии замените на лучший. Но программистам к этому не привыкать. Первый плюс: не будет переполняющей радости, т. к. мы будем подходить к решению постепенно вместо того, чтобы сделать все одним махом. Второй — это то, что мы получим некоторые ценные знания в программировании.
Эта серия постов — не о решении задач по матану без калькулятора на бумажке. Она о том, как создавать хорошее программное обеспечение, которое вы можете дать своему другу-продюсеру, чтобы он сделал бас пожирнее.
Что нам понадобится
- Mac с Xcode 4 или выше, или Windows с Visual Studio C++ 2010 или выше
- Некоторое понимание С++ (синтаксис, указатели, основы ООП, механизмы памяти). Вы могли слышать, что С++ это тяжелый язык, но мы не будем использовать слишком сложные приемы.
- Некоторые общие знания о [цифровом] звуке: что такое амплитуда и частота, что делает фильтр, как аудио представляется с определенной частотой дискретизации (sample rate) и битовой глубиной (bit depth). Если вы делали музыку раньше, то, скорее всего, это все вам уже знаете.
- Заинтересованность в обработке цифровых сигналов и в разработке GUI: это две основные темы данного руководства. Если у вас нет никаких знаний в обработке цифровых сигналов, то по ходу разработки вам придется почитывать дополнительные материалы для заполнения пробелов. Я постараюсь давать ссылки на дополнительное чтение.
Полезные ресурсы
Пара ссылок, которые нам могут пригодиться:
- Stack Overflow: здесь можно узнать, например, что значат непонятные предупреждения, которые вы будете получать от компилятора.
- DSP Guide: очень хорошая бесплатная книга (на английском), покрывает больше материала, чем нам нужно. Если вам будет непонятен какой-нибудь концепт из обработки сигналов, почитайте эту тему в ней.
Теперь пора все настроить и подготовить.
Установка и настройка WDL-OL
Сейчас мы установим библиотеку WDL-OL и ее зависимости. Затем запустим пример, просто чтобы убедиться, что все работает как надо.
Большая часть этого материала есть в видео Оли Ларкина:
Материал следующей секции в основном для настройки на Mac. Windows будет немного ниже.
Настройка на Mac OS X с использованием Xcode 4
Перед тем, как мы начнем, надо скачать и установить парочку новых вещей. Это немного муторно, но придется сделать только один раз.
- Если не установлен Xcode, скачайте и установите.
- Cкачайте последнюю версию VST3 SDK. Для скачивания нужно зарегистрировать аккаунт.
- Скачайте Audio Tools for Xcode. В меню Xcode щелкните Open Developer Tool → More Developer Tools… (или кликайте сюда). Найдите Audio Tools for Xcode в списке, скачайте и установите. Для разных OS X есть разные версии, так что выбирайте внимательнее.
- Скачайте RtAudio (в пакет включены некоторые нужные файлы из ASIO SDK).
- Если у вас нету git, стоит его установить.
Загрузка WDL-OL
Откройте Terminal и напечатайте следующие строки, чтобы создать новую папку в вашей домашней директории и переместиться туда:
Давайте загрузим WDL-OL:
git clone github.com/olilarkin/wdl-ol
cd wdl-ol
git checkout 0a360c90b3460717210eeaee7464bc7009c9a5ba .
Эти строчки можно скопировать и вставить. Главное — не забудьте точку в конце! Тогда вы наверняка будете использовать ту же версию WDL-OL, что и в этом руководстве. На данный момент должна появиться подпапка wdl-ol.
Добавление зависимостей
Заходите в ASIO_SDK и скопируйте сюда файлы .cpp и .h из папки include из RtAudio.
Разархивируйте VST3 SDK и скопируйте файлы aeffect.h и aeffectx.h из папки pluginterfaces/vst2.x в подпапку wdl-ol/VST_SDK (они могут быть уже включены в VST3 SDK в подпапке pluginterfaces/vst2.x). Помимо этого для VST3 вам понадобятся base/source, pluginterfaces и public.sdk/source. Скопируйте из следующим образом:
Обратите внимание, что папку public.sdk надо будет создать вручную. Так в итоге должно выглядеть ваше дерево папок:
Теперь откройте common.xcconfig (он должен открыться в Xcode) и внесите следующие изменения:
CERTIFICATE_ID = Your Name
// Comment this line out:
// COMPILER = com.apple.compilers.gcc.4_2
// Uncomment this line:
COMPILER = com.apple.compilers.llvm.clang.1_0
// Add these lines:
VST_FOLDER =
/Library/Audio/Plug-Ins/Components
// Comment these out:
//VST_FOLDER = /Library/Audio/Plug-Ins/VST
//VST3_FOLDER = /Library/Audio/Plug-Ins/VST3
//AU_FOLDER = /Library/Audio/Plug-Ins/Components
Также мы будем использовать Mac OS X 10.5 для переменных BASE_SDK и MACOSX_DEPLOYMENT_TARGET . Продюсеры, и в особенности владельцы студий, часто очень ленятся обновлять свою ОС. Им не нужны новые фишки, а вот несколько дней простоя из-за проблем с обновлением софта могут вылиться в большие финансовые потери.
На самом деле deployment target содержит информацию о той версии, которая понадобится пользователям, но я предпочитаю прописывать ту же версию для основного SDK.
SDK 10.5 не включен в Xcode 4. Если он у вас уже установлен, переходите к пункту «Запуск тестового проекта». Если нет, то читайте дальше:
Установка SDK 10.5
Чтобы его установить, нужно скачать Xcode 3.2.6. Когда вы его скачаете, смонтируйте .dmg файл, откройте Terminal.app и введите
open /Volumes/Xcode\ and\ iOS\ SDK/Packages/
Откроется окно поисковика и там будет файл с именем MacOSX10.5.pkg. Щелкнике по нему два раза. Если у вас версия OS X 10.8 или выше, появится сообщение, что программа от неизвестного разработчика не может быть установлена. В этом случае правый клик по файлу, в меню надо нажать Open и подтвердить, что вы действительно хотите установить софт. При установке выберите change install location, кликните по диску, на который хотите установить, чтобы можно было выбрать на нем директорию. Установите, например, в папку Downloads в папке пользователя. После завершения установки в выбранном месте появится новая папка MacOSX10.5.sdk. Напечатайте в Terminal.app следующее:
Снова появится окно поисковика. Перетащите в него папку MacOSX10.5.sdk. После перезапуска Xcode старый SDK должен быть доступен в Xcode 4. Убедитесь, что вы сделали резервную копию MacOSX10.5.sdk где-нибудь: если вы будете обновлять Xcode до более поздней версии, вам, возможно, придется повторить эти действия.
Запуск тестового проекта
В Терминале перейдите в папку с примерами:
Запустите скрипт dublicate чтобы создать свой первый плагин (замените YourName что-нибудь свое):
./duplicate.py IPlugEffect/ MyFirstPlugin YourName
Теперь там появилась новая папка MyFirstPlugin. Зайдите в нее и откройте MyFirstPlugin.xcodeproj. Выберите таргет APP:
В WDL-OL есть маленький баг: самостоятельное приложение не будет выводить звук, если не выбрать другой аудиовход. Но это легко исправить. В навигаторе проектов Xcode откройте Other Sources → OSX App Wrapper → app_main.h. Измените содержание 34-й строки (в которой #define DEFAULT_INPUT_DEV ) на следующее:
#define DEFAULT_INPUT_DEV «Built-in Microphone»
Кликните Run. Выскочат несколько ошибок линкера:
Их легко исправить. Вернитесь в настройки сборки вашего проекта (убедитесь, что вы выбрали именно ваш проект, а не какой-то другой target) и поменяйте значение параметра Implicitly Link Objective-C Runtime Support на No:
Снова кликните Run. Через пару секунд плагин появится в виде самостоятельного приложения:
Проверка версии AudioUnit при помощи Logic
Если у вас нет Logic, можно использовать бесплатный инструмент auval для проверки. Убедитесь, что сборка AU Target прошла успешно, откройте Terminal и введите:
auval -a 2> /dev/null | grep MyFirstPlugin
Он должен выдать что-то типа этого:
aumu Abcd Efgh — YourName: MyFirstPlugin
Если Logic или auval не находят AU (а другие хосты типа REAPER его видят), зайдите в настройки сборки и убедитесь, что вверху слева выделен таргет AU. В поиске вбейте “active arch”. В результатах должна быть только одна строка параметра Build Active Architecture Only, значение которого . Измените его на No. Таким образом 32-х и 64-х битные версии будут компилироваться даже в режиме Debug. После этого зайдите в Product → Clean (Cmd+Shift+K) и запустите сборку снова. Теперь должно заработать.
Установка на Windows с использованием Visual C++ 2010 Express
Для начала установите Visual C++ 2010 Express.VS 2012 вроде тоже подойдет, но лично я не проверял.
Для создания 64-х битных версий плагинов понадобится обновление компилятора, что, в свою очередь, может требовать наличия Windows SDK v 7.1. Корректная установка Windows SDK v 7.1 после установки обновления VisualStudio 2010 SP1 очень затруднительна. При установке может выскочить fatal error .
Чтобы исправить положение, повторно запустите установщик Windows SDK v 7.1 и снимите галочку с Visual C++ Compilers and libraries.
Чтобы наверняка иметь правильную конфигурацию, удалите следующие продукты и установите их в таком порядке:
- Visual Studio 2010
- Windows SDK 7.1
- Visual Studio 2010 SP1
- Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1
Пост с описанием других возможных проблем и их решений находится здесь.
Затем установите Git для Windows, используя настройки по умолчанию. Я использовал версию 1.8.4. Запустите Start → Program Files → Git → Git Bash. Откроется окно терминала. В этом окне введите несколько команд:
cd c:
git clone github.com/olilarkin/wdl-ol
cd wdl-ol
git checkout 0a360c90b3460717210eeaee7464bc7009c9a5ba .
Чтобы вставить строки в окно, сделайте правый клик по его заголовку и выберите Edit → Paste:
Теперь скопируйте все файлы VST2/VST3/ASIO SDK в нужные папки, так же, как описано выше. Установите Python, используя настройки по умолчанию. Я использовал 2.7.5.
Чтобы создавать плагины формата VST3, надо создать папку VST3. Выполните в терминале эту команду:
mkdir -p «C:\Program Files\Common Files\VST3»
Теперь перейдите в терминале в подпапку IPlugExamples:
Запустите скрипт duplicate при помощи Python:
c:\Python27\python.exe duplicate.py IPlugEffect MyFirstPlugin YourName
Появится новая папка MyFirstPlugin. Зайдите в нее и откройте MyFirstPlugin.sln. Не обращайте внимания на предупреждения, они говорят о том, что мы не сможем собрать форматы AAX и TDM. В окне project explorer слева убедитесь, что MyFirstPlugin-app выделено жирным:
Если это не так, кликните по нему и выберите Set as StartUp Project. Жмите F5, должно появиться такое окно:
Возможные проблемы
Если вы видите ошибку fatal error LNK1123 в процессе сборки, вам нужно отключить incremental linking: правым кликом по проекту MyFirstPlugin-app, кликайте по Properties и заходите в Configuration Properties → Linker (General) → Enable Incremental Linking → “No (/INCREMENTAL:NO)”.
Если проблема не решается, попробуйте установить Visual Studio 2010 SP1, если еще не устанавливали. Так же может пригодиться обновление компилятора для создания 64-х битных версий плагинов.
Источник