2012-01-28 16 views
8

Sto cercando di utilizzare la libreria ImageMagick in Mono su un Mac. Ho installato la libreria ImageMagick con MacPorts e ho verificato che il file libMagickWand.dylib esista nella directory /opt/local/lib. Ho anche creato un collegamento software a tale file nella directory /usr/local/lib.DllNotFoundException con DllImport in Mono su Mac: architettura errata

Ecco la mia dichiarazione DllImport:

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

Ecco il mio app.config:

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

E, alla chiamata a WandGenesis();, ho un DllNotFoundException, con il messaggio 'libMagickWand'.

Ho letto this page e penso di seguire tutte le regole. C'è qualcos'altro che posso provare?

Aggiornamento:

ho eseguito il file exe con MONO_LOG_LEVEL = debug. Ecco le informazioni pertinenti:

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

architettura sbagliato: Io corro Snow Leopard in modalità a 32 bit e sempre avere. Ho installato ImageMagick con MacPorts e ho installato Mono con il pacchetto Mac da mono-project.com. Cosa sarebbe stato compilato con un'architettura diversa?

Aggiornamento:

Credo di avere trovato il mio problema:

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

Aggiornamento:

... ma sto ancora problemi. Non riesco a capire come compilare ImageMagick con l'architettura i386. Quando provo a farlo usando i flag, si lamenta di altre librerie che sono state compilate come 64-bit.

+0

Vedere la mia risposta aggiornata. –

risposta

7

Aggiornamento:

Mono su Mac OS X è a 32 bit (almeno di solito, è possibile confermare che con mono --version) e si sta cercando di collegare con 64bit binario che non è possibile. Devi fornire binari a 32 bit (o usare Mono a 64 bit).


Avete l'errore anche quando solo il nome del file della libreria è il bersaglio e la biblioteca è collocato in modo appropriato (o l'insieme DYLD_LIBRARY_PATH)? In tal caso, fornire l'output di mono eseguito con MONO_LOG_LEVEL = debug.

+1

Grazie. L'ho eseguito con MONO_LOG_LEVEL = debug e ho ottenuto alcune informazioni. Aggiornerò la mia domanda originale – ken