从Linux库源构建Win32 DLL

时间:2009-09-13 05:31:31

标签: linux dll winapi

我正在尝试从与音频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的依赖性要求(这是我正在尝试构建的)

我在这一点上完全迷失了,如果有人能给我一个正确方向的推动......并且,有更简单的方法吗?

非常感谢提前。

2 个答案:

答案 0 :(得分:1)

Linux到w32主要是一个棘手的事情 对于每个依赖项,请下载源代码并:

./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&amp;使用前缀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>

无论如何,橡皮筋的主轴提供了二进制文件;我认为你应该考虑使用它们而不是完成所有这些。