在Mac上的Mono中使用DllImport进行DllNotFoundException:错误的体系结构

时间:2012-01-28 21:08:09

标签: c# architecture mono interop imagemagick

我正在尝试与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位的库。

1 个答案:

答案 0 :(得分:7)

<强>更新

Mac OS X上的Mono是32位(至少通常,您可以使用mono --version确认),并且您尝试使用64位二进制文​​件进行链接,这是不可能的。您必须提供32位二进制(或使用64位Mono)。


即使只有库的文件名在目标中并且库被正确放置(或者设置了DYLD_LIBRARY_PATH),您是否也有错误?在这种情况下,请提供使用MONO_LOG_LEVEL = debug执行的mono输出。