Ho un'applicazione che utilizza dlopen()
per caricare moduli aggiuntivi. L'applicazione e i moduli sono costruiti su Ubuntu 12.04 x86_64 usando gcc 4.6 ma per i386 arch. I binari vengono quindi copiati su un'altra macchina con esattamente lo stesso sistema operativo e funzionano correttamente.Impossibile caricare altri oggetti con TLS statico
Tuttavia se sono copiati in Ubuntu 12.04 i386 poi alcuni (ma non tutti) i moduli non vengono caricati con il seguente messaggio:
dlopen: cannot load any more object with static TLS
Ho il sospetto che questo è causato dall'uso di __thread
variabili. Tuttavia tali variabili non sono utilizzate nei moduli caricati - solo nel modulo del caricatore stesso.
Qualcuno può fornire ulteriori informazioni, quale può essere la causa?
sto riducendo il numero di __thread
variabili e ottimizzazione (con -ftls-model
, ecc), sono solo curioso il motivo per cui non funziona su quasi stesso sistema.
Correlato: http://stackoverflow.com/questions/13650740/dlopen-cannot-load-any-more-object-with-static-tls – Wok