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

5
我有一个在Windows上的.NET 4程序。我正在尝试使用mono和Xamarin studio将其移植到Mac计算机上。 我有第三方库 EmguCV (它是 OpenCV 库的包装器)。我正在使用官方手册进行安装。它会将 OpenCV EmguCV 都安装到

Library/Python/2.7/site-packages/emgucv/lib

当我从Xamarin中以调试模式启动程序时,一切都正常。它找到并使用所有库。但是,当我将程序制作为“pak”并在没有安装 EmguCV 的计算机上运行时,我遇到了“未找到DLL”异常。

我使用以下命令创建我的程序:

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本地库上,但我无法确定哪里出错了:(


不确定C#...通常只需将DLL二进制文件添加到工作目录或任何其他地方,系统/程序可以在其中找到它们。 - Micka
是的。对于Windows来说没问题,但对于MAC来说不行。我把所有的openCV dylib都放到了我的debug文件夹中,但还是出现了错误。 - Artem Kulikov
2个回答

3

嗯,我在Mac论坛上花了很多时间 :)

关键是OSX动态库(*.dylib)有一个“安装名称”,告诉操作系统库期望被找到的位置。 因此,要使用它 - 我应该改变“安装名称”。为此 - 我使用了一个工具dylibbundler,像这样用install_name_tool更改名称:

install_name_tool -id "@loader_path/dylibs/libcvextern.dylib" libcvextern.dylib

@loader_path 是Mac上的一个特殊变量,它允许使用相对于应用程序路径的相对路径。


1
这些是我首先要检查的事情: 1. 您的pak是否完整。听起来您可能已经检查过了。 2. 您的测试系统是否安装了opencv二进制文件并在路径中。

每个用户不必单独安装opencv二进制文件,但每个用户必须能够访问opencv二进制文件所在的位置。这可以通过确保路径变量包含您的opencv二进制文件所在的目录来实现。或者,您可以将您的opencv二进制文件符号链接到已经在每个用户路径中的目录位置。 - Darren

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