2012-01-28 16 views
8

Estoy intentando interoperar con la biblioteca de ImageMagick en Mono en una Mac. Instalé la biblioteca de ImageMagick con MacPorts y he verificado que el archivo libMagickWand.dylib existe en el directorio /opt/local/lib. También he creado un enlace suave a ese archivo en el directorio /usr/local/lib.DllNotFoundException con DllImport en Mono en Mac: arquitectura incorrecta

aquí está mi declaración DllImport:

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

Aquí es mi App.config:

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

Y, en la llamada a WandGenesis();, consigo un DllNotFoundException, con el mensaje 'libMagickWand'.

He leído this page y creo que estoy siguiendo todas las reglas. ¿Hay algo más que pueda probar?

Actualización:

me encontré con el .exe MONO_LOG_LEVEL = depuración. Aquí está la información pertinente:

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

arquitectura equivocada: Estoy con Snow Leopard en modo de 32 bits y siempre tienen. Instalé ImageMagick con MacPorts e instalé Mono con el paquete Mac de mono-project.com. ¿Qué se habría compilado con una arquitectura diferente?

Actualización:

Creo que he encontrado mi problema:

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

Actualizar:

... pero sigo teniendo problemas. Parece que no puedo entender cómo compilar ImageMagick con la arquitectura i386. Cuando trato de hacerlo con banderas, se queja de otras bibliotecas compiladas como de 64 bits.

+0

Ver mi respuesta actualizada. –

Respuesta

7

Actualización:

Mono en Mac OS X es 32 bits (al menos por lo general, se puede confirmar que con mono --version) y que está tratando de enlazar con el binario de 64 bits que no es posible. Debe proporcionar un binario de 32 bits (o usar un Mono de 64 bits).


¿Tiene el error incluso cuando sólo el nombre de archivo de la biblioteca está en el objetivo y la biblioteca se coloca adecuadamente (o el conjunto DYLD_LIBRARY_PATH)? En tal caso, proporcione el resultado de mono ejecutado con MONO_LOG_LEVEL = depuración.

+1

Gracias. Lo ejecuté con MONO_LOG_LEVEL = depuración y obtuve algunas ideas. Actualizaré mi pregunta original. – ken