我正在尝试与Mac上的Mono中的ImageMagick库互操作。我使用MacPorts安装了ImageMagick库,并验证了目录 / opt / local / lib 中存在 libMagickWand.dylib 文件。我还在 / usr / local / lib 目录中创建了该文件的软链接。
这是我的DllImport声明:
[DllImport("libMagickWand", EntryPoint = "MagickWandGenesis")]
static extern void WandGenesis();
这是我的App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<dllmap dll="libMagickWand" target="/opt/local/lib/libMagickWand.dylib" />
</configuration>
并且,在致电WandGenesis();
时,我得到一个DllNotFoundException
,其中包含“libMagickWand”消息。
我读过this page,我认为我遵循所有规则。还有什么我可以尝试的吗?
更新
我使用MONO_LOG_LEVEL = debug运行.exe。以下是相关信息:
Mono: DllImport error loading library 'dlopen(/opt/local/lib/libMagickWand.5.dylib, 9):
no suitable image found.
Did find: /opt/local/lib/libMagickWand.5.dylib: mach-o, but wrong architecture'.
错误的架构:我在32位模式下运行Snow Leopard并且总是有。我在MacPorts上安装了ImageMagick,并使用mono-project.com的Mac软件包安装了Mono。用不同的架构编译的是什么?
更新
我想我发现了我的问题:
MacBook-Pro:lib ken$ lipo -info libMagickWand.5.dylib
Non-fat file: libMagickWand.5.dylib is architecture: x86_64
更新
......但我仍有问题。我似乎无法弄清楚如何使用i386架构编译ImageMagick。当我尝试使用标志时,它会抱怨其他编译为64位的库。
答案 0 :(得分:7)
<强>更新强>
Mac OS X上的Mono是32位(至少通常,您可以使用mono --version
确认),并且您尝试使用64位二进制文件进行链接,这是不可能的。您必须提供32位二进制(或使用64位Mono)。
即使只有库的文件名在目标中并且库被正确放置(或者设置了DYLD_LIBRARY_PATH),您是否也有错误?在这种情况下,请提供使用MONO_LOG_LEVEL = debug执行的mono输出。