在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw
Posted
技术标签:
【中文标题】在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw【英文标题】:make install on MinGW/MSYS doesn't like --prefix=/mingw 【发布时间】:2009-09-17 16:13:14 【问题描述】:我已经开始使用 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”上。所以不要用 && 将它们全部放在一行中,只需分别运行每个命令,等待它完成,然后输入下一个。 我实际上确实分别运行了这三个步骤。当我问这个问题时,我只是将它们与 && 放在一条线上。无论如何,我确信在 make install 期间会发生错误。我已经修改了我的问题,很抱歉造成不必要的混乱。 很抱歉实际上对这个问题没有太大帮助,但为什么它创建 *.so 而不是 *.dll? configure 是否识别出您在 Windows 上?如果有帮助,我相信 MSYS 的“ln”只会创建文件的副本,而不是链接它(因为 Windows 上确实不支持链接)。另外,它在什么目录下,什么时候失败? 【参考方案1】:您错误地配置了您的构建:*.so
文件适用于 Linux,而不是 Windows。您很可能需要将 --host=i686-pc-mingw32
之类的选项添加到您的配置调用中。
【讨论】:
【参考方案2】:在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。
【讨论】:
以上是关于在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw的主要内容,如果未能解决你的问题,请参考以下文章