我正在尝试与 Mac 上 Mono 中的 ImageMagick 库互操作。我用 MacPorts 安装了 ImageMagick 库,并验证了文件 libMagickWand.dylib 存在于目录 /opt/local/lib 中。我还在目录 /usr/local/lib 中创建了指向该文件的软链接(soft link)。
这是我的 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 位的库。
最佳答案
更新:
Mac OS X 上的 Mono 是 32 位的(至少通常情况下,您可以使用 mono --version
确认这一点)并且您正在尝试链接 64 位二进制文件,这是不可能的。您必须提供 32 位二进制文件(或使用 64 位单声道)。
即使只有库的文件名在目标中并且库被正确放置(或 DYLD_LIBRARY_PATH 设置)时,您是否也有错误?在这种情况下,请提供使用 MONO_LOG_LEVEL=debug 执行的单声道输出。
关于c# - Mac 上 Mono 中的 DllImport 出现 DllNotFoundException : wrong architecture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048626/