如何在发布版本中附加第三方库
How to attach third-part libraries in release version
我有一个用于 Windows 的 .NET 4 程序。我正在尝试将它移植到 Mac 台带有 mono 和 Xamarin studio 的计算机。
我有第三方库 EmguCV
(它是 OpenCV
库的包装器)。我正在使用 official manual 来安装它。它将 OpenCV
和 EmguCV
都安装到
Library/Python/2.7/site-packages/emgucv/lib
当我从 Xamarin 以调试模式启动程序时 - 一切正常。它找到所有库并使用它。但是,当我在未安装 EmguCV
的计算机上将程序设为 "pak" 和 运行 时 - 我得到了 "DLL not found" 异常。
我用这个命令制作我的程序:
macpack -m:1 -o:. -r:/Library/Frameworks/Mono.framework/Versions/Current/lib/ -r:/Library/Python/2.7/site-packages/emgucv/lib -r:/Library/Python/2.7/site-packages/emgucv/bin -r:Assimp32.dll -r:Assimp64.dll -r:cvextern.dll -r:Emgu.CV.dll -r:Emgu.Util.dll -r:libegl.dll -r:libglesv2.dll -r:OpenTK.dll -r:OpenTK.GLControl.dll -r:RH.AssimpNet.dll -r:RH.HeadEditor.dll -r:RH.ImageListView.dll -r:RH.HeadShop.exe -r:blending.fs -r:blending.vs -r:blendingPl.vs -r:idle.fs -r:idle.vs -r:skelet.vs -r:sprite.png -r:./Libraries -r:./Models -r:./Plugin -r:./Resources -r:./Stages -r:./"Haar Cascades" -n:HeadShop -a:RH.HeadShop.exe
我的第二个和第三个参数应该将 EmguCV
个库附加到我的 pak:
- -r:/Library/Python/2.7/site-packages/emgucv/lib
- -r:/Library/Python/2.7/site-packages/emgucv/bin
当我查看 pak 内部时 - 我找到了这个库。但是程序仍然没有找到它..
我猜 openCV
本机库有问题,但我不知道哪里出了问题:(
这些是我首先要检查的内容。
1. 你的 pak 完整吗?听起来您可能已经检查过了。
2.您的测试系统是否安装了opencv二进制文件并在路径中。
嗯,我在 mac 论坛上花了很多时间 :)
重点是 OSX 动态库 (*.dylib) 有一个 "install name" 告诉 OS 库期望在哪里找到。
因此,要使用它 - 我应该更改 "install name"。为此 - 我使用了一个工具 dylibbundler
将此名称更改为 install_name_tool
,如下所示:
install_name_tool -id "@loader_path/dylibs/libcvextern.dylib" libcvextern.dylib
其中 @loader_path
是一个特殊的 Mac 变量,允许相对于应用程序路径使用。
我有一个用于 Windows 的 .NET 4 程序。我正在尝试将它移植到 Mac 台带有 mono 和 Xamarin studio 的计算机。
我有第三方库 EmguCV
(它是 OpenCV
库的包装器)。我正在使用 official manual 来安装它。它将 OpenCV
和 EmguCV
都安装到
Library/Python/2.7/site-packages/emgucv/lib
当我从 Xamarin 以调试模式启动程序时 - 一切正常。它找到所有库并使用它。但是,当我在未安装 EmguCV
的计算机上将程序设为 "pak" 和 运行 时 - 我得到了 "DLL not found" 异常。
我用这个命令制作我的程序:
macpack -m:1 -o:. -r:/Library/Frameworks/Mono.framework/Versions/Current/lib/ -r:/Library/Python/2.7/site-packages/emgucv/lib -r:/Library/Python/2.7/site-packages/emgucv/bin -r:Assimp32.dll -r:Assimp64.dll -r:cvextern.dll -r:Emgu.CV.dll -r:Emgu.Util.dll -r:libegl.dll -r:libglesv2.dll -r:OpenTK.dll -r:OpenTK.GLControl.dll -r:RH.AssimpNet.dll -r:RH.HeadEditor.dll -r:RH.ImageListView.dll -r:RH.HeadShop.exe -r:blending.fs -r:blending.vs -r:blendingPl.vs -r:idle.fs -r:idle.vs -r:skelet.vs -r:sprite.png -r:./Libraries -r:./Models -r:./Plugin -r:./Resources -r:./Stages -r:./"Haar Cascades" -n:HeadShop -a:RH.HeadShop.exe
我的第二个和第三个参数应该将 EmguCV
个库附加到我的 pak:
- -r:/Library/Python/2.7/site-packages/emgucv/lib
- -r:/Library/Python/2.7/site-packages/emgucv/bin
当我查看 pak 内部时 - 我找到了这个库。但是程序仍然没有找到它..
我猜 openCV
本机库有问题,但我不知道哪里出了问题:(
这些是我首先要检查的内容。 1. 你的 pak 完整吗?听起来您可能已经检查过了。 2.您的测试系统是否安装了opencv二进制文件并在路径中。
嗯,我在 mac 论坛上花了很多时间 :)
重点是 OSX 动态库 (*.dylib) 有一个 "install name" 告诉 OS 库期望在哪里找到。
因此,要使用它 - 我应该更改 "install name"。为此 - 我使用了一个工具 dylibbundler
将此名称更改为 install_name_tool
,如下所示:
install_name_tool -id "@loader_path/dylibs/libcvextern.dylib" libcvextern.dylib
其中 @loader_path
是一个特殊的 Mac 变量,允许相对于应用程序路径使用。