[英]Building a Win32 DLL from a Linux library source
我正在尝试从与音频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 ...配置:错误:未满足包装要求(样品率):未找到包'samplerate'”
查看日志后,似乎pkg-config正在寻找samplerate.pc。 如何在Windows中处理包? libsamplerate只是一个开源库,我有源代码和DLL。 但我不知道如何使用它们来满足librubberband的依赖性要求(我正在尝试构建)
我完全迷失在这一点上,如果有人能给我一个正确方向的推动......并且,有更简单的方法吗?
提前谢谢了。
Linux到w32主要是一个棘手的事情。
对于每个依赖项,请下载源代码并:
./configure
make
sudo make install
另外,我建议您使用MinGW + msys代替CygWin(因为后者产生依赖于其库的可执行文件)。 但是在你的场景中,使用VS方法 - 这将为你节省大量时间。
如果你仍然坚持这一点我可以抛出一点光。
您可能必须从源构建所有内容(或在您的环境中安装库)。 您正在使用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相同的过程:使用前缀提取,配置,make和make install。 现在将FFTW的头文件(在示例中,它们位于/cygdrive/c/cygwin/include
)复制到usr
目录中的include
目录(在示例/cygdrive/c/cygwin/usr/include
)。
下一个SRC (libsamplerate),相同的程序。
然后是Vamp插件SDK 。 为了编译它,你可能需要编辑文件src\\vamp-hostsdk\\PluginLoader.cpp
,从dlopen()
调用中删除RTLD_LOCAL
(它是安全的,它已经是默认行为)。
此外,您可能需要手动安装(根据我的经验,它不喜欢前缀)。 或者设置环境变量PKG_CONFIG_PATH
指向pkgconfig的路径,例如:
set PKG_CONFIG_PATH=/cygdrive/c/cygwin/lib/pkgconfig:/usr/local/lib/pkgconfig
现在,在include目录中创建一个名为ladspa.h
的文件,其中包含LADSPA头的内容
最后,配置和构建rubberband,它应该找到它需要的一切。
要使用MinGW在MSYS中构建,请使用相应的前缀,执行相同的过程。 使用Visual Studio是另一种选择,但是您可能需要使用一些预构建的库(例如对于libsndfile),因为在Windows中本地构建Linux库可能很复杂甚至不可能(没有破解源代码)在VS中。
无论如何,橡皮筋的主轴提供二进制; 我认为你应该考虑使用它们而不是经历所有这些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.