Il collegamento è incasinato..cos'è -rpath?MacOS X
-
27-09-2019 - |
Domanda
Quindi, sto costruendo un progetto e utilizza le funzioni di una libreria compilata (.dylib o .so).Ho le intestazioni e i file della libreria (tutto questo fa parte di QtRoot, tra l'altro) nelle posizioni appropriate, ma quando provo a creare il mio progetto in Xcode, ricevo un errore del debugger:
amico:Libreria non caricata:@rpath/librio.so referenziato da:/Utenti/Paulthompson/Documents/Programming/Build Products/Debug/MacheLiossim.App/Contende/MacOS/Majexim Motivo:Immagine non trovata sharedlibrary apply-load-rules all I formattatori di dati temporaneamente non disponibili, riproveranno dopo un 'continue'.(Al momento non è possibile accedere al caricatore, è bloccato.)
Ora, il programma stesso che è stato creato funzionerà perfettamente se lo apro dal Finder, ma ogni volta che provo a eseguirlo da Xcode, mi vomita.Cos'è questa cosa di rpath e perché il debugger non riesce a trovare le librerie, anche se Xcode stesso sa dove sono e apparentemente anche il programma quando viene eseguito dal Finder può trovarle?
Soluzione
http://en.wikipedia.org/wiki/Rpath_ (collegamento)
E 'un percorso memorizzato nel binario per trovare librerie condivise. Quando si avvia l'applicazione da Finder, è probabilmente un pacchetto app? Quando vengono creati app fasci, le librerie condivise vengono copiati nel fascio app, ei percorsi alle librerie in bundle diventano relativa allora. (@Executable_path /../ Frameworks / foobar). Come hai creato la versione che funziona da Finder?
La verifica l'errore precedente al link-time o quando si avvia l'applicazione dal Xcode? (In quest'ultimo caso, provare con DYLD_LIBRARY_PATH)
Inoltre, l'estensione .so per LIBRIO invece di .dylib sembra un po 'sospetto.
Altri suggerimenti
Aggiungi rpath nella fase di collegamento, come in questo esempio (in qt creator):
LIBS += -L/usr/local/root/lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lpthread -Wl, -rpath,/usr/local/root/lib -lm -ldl