繁体   English   中英

从Linux库源构建Win32 DLL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM