2016-03-03 22 views
6

Quello che mi piacerebbe fare è configurare il mio file CMakeLists in modo che durante la costruzione del mio progetto il linker usi una copia di una libreria condivisa (.so) che risiede nel mio albero di build per collegare l'eseguibile contro ma non imposta il percorso nel file eseguibile collegato in modo che il sistema debba fornire la libreria quando il caricatore lo richiede.CMake: non impostare rpath per una singola libreria utilizzata nel collegamento

In particolare, desidero collegarmi a libOpenCL.so durante la fase di compilazione in una farm di build che non ha libOpenCL.so installato come libreria di sistema. Per fare ciò, libOpenCL.so si trova nella struttura di costruzione del progetto e fa riferimento usando un percorso assoluto nel file CMakeLists. Questo percorso assoluto è quello di garantire che se il sistema ha libOpenCL.so installato, non viene utilizzato.

Tuttavia, quando si esegue l'eseguibile finale, CMake ha aggiunto il percorso assoluto al percorso che interrompe la versione di sistema di libOpenCL.so che viene prelevata dal caricatore di libreria e utilizzata.

Sembra semplice ma non riesco a capirlo.

Grazie!

+2

È possibile assumere il controllo completo delle impostazioni RPATH invece di consentire a CMake di autogenerarlo. Vedi wiki su [consegnare RPATH in CMake] (https://cmake.org/Wiki/CMake_RPATH_handling). – Tsyvarev

risposta

0

Secondo il CMake Wiki questo non dovrebbe essere un problema:

Per impostazione predefinita, se non si modificano le impostazioni relative rPath, CMake collegherà gli eseguibili e le librerie condivise con piena RPATH a tutte le librerie usate in l'albero di costruzione. Durante l'installazione, cancellerà il RPATH di questi obiettivi in ​​modo che vengano installati con un RPATH vuoto.

Quindi potresti provare a installarlo semplicemente?

+0

Sto volendo modificare il percorso di costruzione piuttosto che il percorso di installazione. Inoltre, alcune delle librerie che uso sono librerie personalizzate che dovrebbero avere un rpath una volta installato. Trovare il giusto mix per mantenere il controllo di alcune librerie e scartarlo per gli altri è il nocciolo del mio problema. Idealmente, per la configurazione di rpath della libreria, ma non riesco a trovarlo in cmake :( – user2746401

+0

@ user2746401 Quindi una compilazione "in atto" senza l'installazione di spostare i binari finali da qualche altra parte? Anche se si eliminerebbe il percorso di tutti i binari, la lib di OpenCL "temporanea" sarebbe ancora la migliore corrispondenza per il linker, non è vero? – ToniBig

+0

@ToniBig Sto costruendo sul posto.Se spoglio il rpath il loader della libreria non sarà in grado di trovare le mie librerie personalizzate a tutti quindi il loader non troverà la libreria "temporanea" di OpenCL. Si noti che questa è una domanda caricatore di librerie piuttosto che una domanda di configurazione del linker. – user2746401

Problemi correlati