在MinGW/MSYS上执行make install时,不支持--prefix=/mingw选项。

6

我开始使用MinGW/MSYS来尝试在Windows上使用一些Linux库。使用

./configure --prefix=/mingw 
make
make install

到目前为止,一切都很顺利,但是我在两个不同的库上执行'make install'时失败了,在'ln -s'调用上出了问题。大致情况如下:

rm -f /mingw/lib/libvamp-sdk.so.2
ln -s libvamp-sdk.so.2.0.0 /mingw/lib/libvamp-sdk.so.2
ln: creating symbolic link `/mingw/lib/libvamp-sdk.so.2' to `libvamp-sdk.so.2.0.0': No such file or directory
make: *** [install] Error 1

首先,makefile的意图是什么?/mingw/lib/libvamp-sdk.so.2.0.0已经存在, 因此用上述的'ln -s'调用替换它。

ln -s /mingw/lib/libvamp-sdk.so.2.0.0 /mingw/lib/libvamp-sdk.so.2

这样做可以工作,但我不确定作者是否有意这样做。

更重要的是,为什么会出现这种情况(我猜在本机Linux系统上可以正常工作),以及解决它的最简单方法是什么?我可以手动编辑makefile,但我想知道是否有更好的解决方案。

非常感谢您的参与!


首先,你能否将这些步骤分开执行,这样我们至少可以确定哪一步出了问题?我猜测问题出在"make install"上。所以,不要使用&&将它们全部放在一行中,而是分别运行每个命令,等待其完成后再输入下一个命令。 - Matthew Talbert
实际上,我确实分别运行了这三个步骤。只是在提问时将它们放在一行上,并使用 && 连接起来。无论如何,我确定错误发生在 make install 过程中。我已经修改了我的问题,对于不必要的混淆感到抱歉。 - psas
很抱歉没有真正帮助你解决问题,但为什么它创建的是*.so文件而不是*.dll文件?configure是否识别出你正在使用Windows操作系统?如果有帮助的话,我认为在MSYS中,“ln”只会创建文件的副本,而不是链接它(因为在Windows上实际上不支持链接)。另外,当它失败时,它在哪个目录下? - Matthew Talbert
2个回答

3
你的构建配置有误:*.so文件适用于Linux而不是Windows。你很可能需要在你的配置中加入像--host=i686-pc-mingw32这样的选项。

1

在Linux系统上,未经修改的

ln -s libvamp-sdk.so.2.0.0 /mingw/lib/libvamp-sdk.so.2

创建一个相对符号链接,使得已经链接到该库之前或之后的程序可以使用libvamp-sdk.so.2.0.0。然而,这只在构建.so系统时才有意义。

对于mingw构建,这些行是无关紧要的,因为您要构建的是DLL而不是共享库,机制是不同的。这两行可以从Makefile中安全地删除,只需要确保DLL和库(libfoo.a和libfoo.dll.a)被安装,前者位于/mingw/bin,后者位于/mingw/lib。您可能需要修改Makefile以实现此目的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接