我正在尝试从与音频DSP相关的Linux库(http://breakfastquay.com/rubberband/)构建Win32 DLL。有适用于Linux的makefile和配置脚本,但对Windows没有帮助。作者使用该库提供了一个示例应用程序的Win32二进制文件,我看到一些“#ifdef MSVC”和“#ifdef WIN32”散落在周围,所以我不认为我是从头开始,但我'但是我还是坚持了。
由于我在任一平台上的编程知识相当有限,我都会感激任何帮助。
首先,在这里开始的正确方法是什么?视觉工作室? Cygwin的?最初我开始在Visual Studio中创建Win32 DLL项目,添加源文件,考虑添加.def文件等,但在某些时候我觉得这样做无处可去。
至于Cygwin,这是第一次使用它,我甚至不知道这是否是Cygwin的设计目标。是吗?
在Cygwin上,我跑了./configure并遇到了类似的事情:
“检查SRC ... configure:错误:未满足包装要求(样品率):未找到包'samplerate'”
查看日志后,似乎pkg-config正在寻找samplerate.pc。如何在Windows中处理包? libsamplerate只是一个开源库,我有源代码和DLL。但我不知道如何使用它们来满足librubberband的依赖性要求(这是我正在尝试构建的)
我在这一点上完全迷失了,如果有人能给我一个正确方向的推动......并且,有更简单的方法吗?
非常感谢提前。
答案 0 :(得分:1)
./configure
make
sudo make install
另外,我建议您使用MinGW + msys代替CygWin(因为后者会产生依赖于其库的可执行文件)。但是在你的场景中,使用VS方法 - 这将为你节省大量时间。
答案 1 :(得分:1)
如果你仍然坚持这一点,我可以抛出一点光。
您可能必须从源构建所有内容(或在您的环境中安装库)。您正在使用Cygwin,我也会推荐MinGW和MSYS,但有时候不可能使用这个组合来构建程序或库。
因此,如果使用Cygwin,请首先确保安装了适当的环境。这是您安装了正确的开发标题。
然后下载libsndfile。将源解压缩到一个目录,然后从Cygwin bash shell导航到该目录。执行:
./configure
make
make install prefix=/cygdrive/c/cygwin
请注意,我使用前缀,该前缀应指向安装Cygwin的目录,以便正确安装库(MinGW和MSYS也是如此,前缀应指向MinGW安装目录)。也许使用前缀中的usr
目录也可以,我从未尝试过。
现在下载FFTW,因为libsamplerate和rubberband需要它。与libsndfile相同的过程:extract,configure,make&使用前缀make install。现在将FFTW的头文件(在它们位于/cygdrive/c/cygwin/include
中的示例中)复制到include
目录中的usr
目录(在示例/cygdrive/c/cygwin/usr/include
中)。< / p>
下一个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),因为在Windows中本地构建Linux库可能很复杂甚至不可能(在不破解源代码的情况下)。 / p>
无论如何,橡皮筋的主轴提供了二进制文件;我认为你应该考虑使用它们而不是完成所有这些。