Сборка Win32 DLL из источника библиотеки Linux - PullRequest
3 голосов
/ 13 сентября 2009

Я пытаюсь собрать Win32 DLL из библиотеки Linux, связанной с аудио-DSP (http://breakfastquay.com/rubberband/).. Существуют make-файлы и конфигурационные сценарии для Linux, но нет помощи для Windows. Автор предоставляет Win32 двоичный файл Пример приложения, использующего библиотеку, и я вижу несколько «#ifdef MSVC» и «#ifdef WIN32», разбросанных вокруг, поэтому я не думаю, что начинаю полностью с нуля, но все же застрял.

Поскольку мои знания в области программирования на обеих платформах весьма ограничены, я был бы признателен за любую помощь.

Прежде всего, как правильно начать здесь? Visual Studio? Cygwin? Первоначально я начал создавать проект Win32 DLL в Visual Studio, добавлять исходные файлы, думать о добавлении файла .def и т. Д., Но в какой-то момент я почувствовал, что это ни к чему не приведет.

Что касается Cygwin, то он впервые использовал его, и я даже не знаю, для этого ли предназначен Cygwin. Это так?

На Cygwin я побежал ./configure и застрял на что-то вроде этого:

"проверка на SRC ... configure: error: Требования к пакету (частота дискретизации) не были выполнены: не найден пакет'raterate '"

После просмотра журнала выясняется, что pkg-config ищет файл samplerate.pc. Как мне обрабатывать пакеты в Windows? libsamplerate - это просто библиотека с открытым исходным кодом, и у меня есть источник и DLL для этого. Но я не уверен, как их использовать для удовлетворения требований к зависимостям для librubberband (это то, что я пытаюсь построить)

Я полностью потерян в этот момент, и если кто-нибудь может подтолкнуть меня в правильном направлении ... и есть ли более простой способ сделать это?

Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 15 сентября 2009

Если вы все еще застряли на этом, я могу пролить немного света.

Возможно, вам придется собрать все из исходников (или установить библиотеки в вашей среде). Вы используете Cygwin, я бы порекомендовал также MinGW и MSYS, но иногда просто невозможно использовать эту комбинацию для сборки программы или библиотеки.

Так что, если вы используете Cygwin, сначала убедитесь, что у вас установлена ​​правильная среда. Это то, что у вас установлены правильные заголовки разработки.

Затем загрузите libsndfile . Извлеките источники в каталог и перейдите из этого каталога в оболочку Cygwin bash. Там выполняют:

./configure
make
make install prefix=/cygdrive/c/cygwin

Обратите внимание, что я использую префикс, этот префикс должен указывать на каталог, который установлен Cygwin для правильной установки библиотек (то же самое происходит с MinGW и MSYS, префикс должен указывать на каталог установки MinGW). Может быть, использование каталога usr в префиксе тоже работает, я никогда не пробовал.

Теперь загрузите FFTW , так как это потребуется для libsamplerate и резиновой ленты. Процедура та же, что и в libsndfile: распаковать, настроить, выполнить и выполнить установку с использованием префикса Теперь скопируйте заголовочные файлы FFTW (в примере они будут в /cygdrive/c/cygwin/include) в каталог include в каталоге usr (в примере /cygdrive/c/cygwin/usr/include).

Далее SRC (libsamplerate), та же процедура.

Затем Vamp plugin SDK . Чтобы скомпилировать его, вам может потребуется отредактировать файл src\vamp-hostsdk\PluginLoader.cpp, удалив RTLD_LOCAL из вызова dlopen() (это безопасно, это уже поведение по умолчанию).

Кроме того, вам может понадобиться установить его вручную (по моим наблюдениям, префикс не понравился). Или установите переменную окружения PKG_CONFIG_PATH, указывающую на пути pkgconfig, например ::

set PKG_CONFIG_PATH=/cygdrive/c/cygwin/lib/pkgconfig:/usr/local/lib/pkgconfig

Теперь создайте файл с именем ladspa.h в каталоге include с содержимым LADSPA заголовка

Наконец, сконфигурируйте и соберите резинку, она должна найти все, что нужно.

Для сборки MSYS с использованием MinGW выполните ту же процедуру, используя соответствующий префикс. Использование Visual Studio - это еще одна альтернатива, но вам может потребоваться использовать некоторые из предварительно собранных библиотек (например, для libsndfile), поскольку сборка библиотек Linux в Windows может быть сложной или даже невозможной (без взлома исходного кода) в VS. 1047 *

Так или иначе, автор резиновой ленты предоставляет двоичные файлы; Я думаю, что вы должны рассмотреть их использование вместо того, чтобы пройти через все это.

1 голос
/ 13 сентября 2009

Linux на w32 - сложная вещь.
Для каждой из ваших зависимостей загрузите исходный код и:

./configure
make
sudo make install

Кроме того, я рекомендую вам использовать MinGW + msys вместо CygWin (поскольку последний создает исполняемые файлы, которые зависят от его библиотек). Однако в вашей ситуации используйте подход VS - это сэкономит вам много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...