DllNotFoundException с DllImport в Mono на Mac: неправильная архитектура - PullRequest
8 голосов
/ 29 января 2012

Я пытаюсь взаимодействовать с библиотекой ImageMagick в Mono на Mac.Я установил библиотеку ImageMagick с MacPorts и убедился, что файл libMagickWand.dylib существует в каталоге / opt / local / lib .Я также создал мягкую ссылку на этот файл в каталоге / usr / local / lib .

Вот мое утверждение DllImport:

[DllImport("libMagickWand", EntryPoint = "MagickWandGenesis")]
static extern void WandGenesis();

Вот мое приложение.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <dllmap dll="libMagickWand" target="/opt/local/lib/libMagickWand.dylib" />
</configuration>

И при вызове WandGenesis(); я получаю DllNotFoundException с сообщением 'libMagickWand'.

Я прочитал этостраница и я думаю, что я следую всем правилам.Есть ли что-то еще, что я могу попробовать?

Обновление:

Я запустил .exe с MONO_LOG_LEVEL = debug.Вот соответствующая информация:

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'.

неправильная архитектура : я использую Snow Leopard в 32-битном режиме и всегда имею.Я установил ImageMagick с MacPorts и установил Mono с пакетом Mac с сайта mono-project.com.Что бы было скомпилировано с другой архитектурой?

Обновление:

Мне кажется, я нашел свою проблему:

MacBook-Pro:lib ken$ lipo -info libMagickWand.5.dylib
Non-fat file: libMagickWand.5.dylib is architecture: x86_64

Обновление:

... но у меня все еще есть проблемы.Я не могу понять, как скомпилировать ImageMagick с архитектурой i386.Когда я пытаюсь сделать это с помощью флагов, он жалуется на другие библиотеки, которые были скомпилированы как 64-битные.

1 Ответ

7 голосов
/ 29 января 2012

Обновление:

Mono в Mac OS X является 32-битным (по крайней мере, обычно вы можете подтвердить это с помощью mono --version), и вы пытаетесь установить связь с 64-битным двоичным файлом, что невозможно. Вы должны предоставить 32-битный двоичный файл (или использовать 64-битный Mono).


Есть ли у вас ошибка, даже если в качестве цели указано только имя файла библиотеки, и библиотека размещена надлежащим образом (или установлен DYLD_LIBRARY_PATH)? В таком случае, пожалуйста, предоставьте вывод mono, выполненный с MONO_LOG_LEVEL = debug.

...