如何在发布版本中附加第三方库

How to attach third-part libraries in release version

我有一个用于 Windows 的 .NET 4 程序。我正在尝试将它移植到 Mac 台带有 mono 和 Xamarin studio 的计算机。 我有第三方库 EmguCV(它是 OpenCV 库的包装器)。我正在使用 official manual 来安装它。它将 OpenCVEmguCV 都安装到

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:

当我查看 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 变量,允许相对于应用程序路径使用。