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

ken*_*ken 8 c# architecture mono interop imagemagick

我正试图在Mac上与Mono中的ImageMagick库互操作.我使用MacPorts安装了ImageMagick库,并验证了文件libMagickWand.dylib是否存在于目录/ opt/local/lib中.我还在/ usr/local/lib目录中创建了一个指向该文件的软链接.

这是我的DllImport声明:

[DllImport("libMagickWand", EntryPoint = "MagickWandGenesis")]
static extern void WandGenesis();
Run Code Online (Sandbox Code Playgroud)

这是我的App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <dllmap dll="libMagickWand" target="/opt/local/lib/libMagickWand.dylib" />
</configuration>
Run Code Online (Sandbox Code Playgroud)

并且,在调用时WandGenesis();,我得到一个DllNotFoundException消息'libMagickWand'.

我已阅读此页面,我认为我遵循所有规则.还有什么我可以尝试的吗?

更新:

我使用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'.
Run Code Online (Sandbox Code Playgroud)

错误的架构:我在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
Run Code Online (Sandbox Code Playgroud)

更新:

......但我还有问题.我似乎无法弄清楚如何使用i386架构编译ImageMagick.当我尝试使用标志时,它会抱怨其他编译为64位的库.

kon*_*ski 7

更新:

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


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