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位的库.
更新:
Mac OS X上的Mono是32位(至少通常,您可以确认mono --version
),并且您尝试使用64位二进制文件进行链接,这是不可能的.您必须提供32位二进制(或使用64位单声道).
即使只有库的文件名在目标中并且库已正确放置(或设置了DYLD_LIBRARY_PATH),您是否有错误?在这种情况下,请提供使用MONO_LOG_LEVEL = debug执行的mono输出.