我正在尝试从与音频 DSP 相关的 Linux 库 (http://breakfastquay.com/rubberband/) 构建 Win32 DLL。有适用于 Linux 的 makefile 和配置脚本,但没有适用于 Windows 的帮助。作者提供了一个使用该库的示例应用程序的 Win32 二进制文件,我看到周围散布着许多“#ifdef MSVC”和“#ifdef WIN32”,所以我认为我不是完全从头开始,但我尽管如此,我还是卡住了。
由于我在这两个平台上的编程知识都相当有限,如果有任何帮助,我将不胜感激。
首先,在这里开始的正确方法是什么? Visual Studio ?西格温?最初我开始在 Visual Studio 中创建一个 Win32 DLL 项目,添加源文件,考虑添加一个 .def 文件等,但在某些时候我觉得这无济于事。
至于 Cygwin,这是第一次使用它,我什至不知道这是否是 Cygwin 设计的目的。是吗?
在 Cygwin 上,我运行 ./configure 并卡在了这样的地方:
“正在检查 SRC...配置:错误:未满足包要求(采样率):未找到包‘samplerate’”
查看日志后,似乎 pkg-config 正在寻找 samplerate.pc。我如何在 Windows 中处理包? libsamplerate 只是一个开源库,我有它的源代码和一个 DLL。但我不确定如何使用它们来满足 librubberband 的依赖性要求(这是我正在尝试构建的)
此时我完全迷失了方向,如果有人可以在正确的方向上轻推我......还有,有没有更简单的方法来做到这一点?
非常感谢。
最佳答案
如果您仍然坚持这一点,我可以提供一些帮助。
您可能必须从源代码构建所有内容(或在您的环境中安装库)。您使用的是 Cygwin,我也推荐 MinGW 和 MSYS,但有时无法使用这种组合来构建程序或库。
因此,如果使用 Cygwin,请首先确保安装了正确的环境。这是您安装了正确的开发 header 。
然后下载libsndfile .将源提取到一个目录,然后从 Cygwin bash shell 导航到该目录。有表演:
./configure
make
make install prefix=/cygdrive/c/cygwin
请注意,我使用了一个前缀,该前缀应指向安装 Cygwin 的目录,以便正确安装库(MinGW 和 MSYS 也是如此,该前缀应指向 MinGW 安装目录)。也许使用前缀中的 usr
目录也可以,我从未尝试过。
现在下载FFTW ,因为 libsamplerate 和 rubberband 需要它。与 libsndfile 相同的过程:使用前缀提取、配置、制作和安装。现在将 FFTW 的头文件(在示例中它们位于 /cygdrive/c/cygwin/include
中)复制到 usr< 中的
目录(示例中为 include
目录/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
现在,在 include 目录中创建一个名为 ladspa.h
的文件,其中包含 LADSPA header 的内容。
最后,配置和构建 rubberband,它应该找到它需要的一切。
要使用 MinGW 在 MSYS 中构建,请遵循相同的过程,使用相应的前缀。使用 Visual Studio 是另一种选择,但您可能需要使用一些预构建的库(例如 libsndfile),因为在 VS 中在 Windows 中本地构建 Linux 库可能很复杂甚至不可能(不破解源代码)。
无论如何,rubberband 的作者提供了二进制文件;我认为您应该考虑使用它们,而不是经历所有这些。
关于linux - 从 Linux 库源构建 Win32 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416930/