Ho una libreria C che viene utilizzata in un'app iOS. Questa libreria utilizza dlopen()
per accedere alla funzionalità di estensione. Il codice funziona perfettamente con il simulatore iOS (in entrambe le modalità a 32 e 64 bit); tuttavia, quando si esegue lo stesso codice su un iPhone5s reali (ARM64), ottengo il seguente errore:Come diagnosticare errori in dlopen() su dispositivi iOS
dlopen(/private/var/mobile/Containers/Bundle/Application/EDEAE282-AE96-45CA-9A4F-D70EE532FB93/foobar.app/lib/time.so, 2): no suitable image found. Did find:
/private/var/mobile/Containers/Bundle/Application/EDEAE282-AE96-45CA-9A4F-D70EE532FB93/foobar.app/lib/time.so: mmap() error 1 at address=0x101CE4000, size=0x00004000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/EDEAE282-AE96-45CA-9A4F-D70EE532FB93/foobar.app/lib/time.so
Per quanto posso capire, il file esiste ed è in fase di trovato con successo. Non è solo un problema di essere compilato per l'architettura sbagliata; lipo -info
rapporti che time.so
è:
Non-fat file: time.so is architecture: arm64
e file
rapporti time.so
come Mach-O 64-bit bundle
.
Le due domande che ho:
Che cosa significa la "Nessuna immagine adatto found" e ") Errore 1 mmap (" messaggi di errore significa?
Come si corregge (o si diagnostica) cosa sta succedendo qui? Ho passato il codice C e la chiamata
dlopen()
ha esito negativo con un valore di ritorno diNULL
, e l'impostazione del messaggio di errore, quindi passare il codice non mi darà ulteriori informazioni.
(come sfondo, - sto cercando di porto Python per iOS, la chiamata a dlopen()
viene utilizzato per caricare i moduli di codice nativo time.so
è uno di quei moduli.).
Hai provato su un altro dispositivo? –
Che differenza farà? – freakboy3742
Sembra che 'mmap()' stia cercando di accedere a un indirizzo specifico, non so davvero nulla su di esso ma ho letto che in questo tipo di dispositivi a volte l'accesso a un indirizzo codificato migliora le prestazioni o qualcosa del genere. –