c# - Mac 上 Mono 中的 DllImport 出现 DllNotFoundException : wrong architecture

标签 c# architecture mono interop imagemagick

我正在尝试与 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/

相关文章:

architecture - PouchDB可以在客户端代理一个大数据库吗?

c# - 如何在 MonoDevelop 中使用 Mono C# 中的 System.Numerics?

c# - 控制 Mono GC

c# - 仅通过 EWS 获取具有 "Free/Busy time, subject, location"权限级别的同事的预约

c# - HttpValueCollection 和 NameValueCollection

java - 使用选择排序方法对二维数组进行排序并将结果写入文件

.net - 如何静态编译 Microsoft .NET 代码?

c# - 如何从包含多个 GzipStreams 的文件中读取

architecture - 软件项目的模块化有多重要

ruby-on-rails - Ruby 中的存储库或网关模式