La risposta generale è che non si può, ma c'è un paio di trucchi che si possono fare.
Per esempio, objcopy da binutils ha la possibilità di copiare un oggetto, ma mettere un prefisso ad ogni simbolo utilizzando --prefix-simboli bandiera . il prefisso delle cose è spesso lo spazio dei nomi del povero ed è un modo "ok" per evitare conflitti.
L'uso è piuttosto semplice, qualcosa di simile:
objcopy --prefix-symbols "__mylib_" object.o new_object.o
NOTA: sì, funziona con i file .so troppo.
NOTA 2: questo interromperà completamente il caching del nome in C++, quindi provatelo solo su una libreria con un'API in stile C. Dal momento che stai parlando di aggiungere uno spazio dei nomi in cui non ce ne sono, presumo che sia così.
fonte
2009-07-13 19:53:26
Ho appena visto il sito Web di OpenCV. Sembra che tutte le funzioni abbiano come prefisso un "cv". Mentre gli spazi dei nomi sono una soluzione migliore, mi chiedo, stai avendo reali collisioni con i simboli? –
Non sto avendo collisioni vere, è solo per mantenere le cose organizzate mentre sto facendo wrapper di alcune strutture dati openCV e vorrei metterle nello stesso spazio dei nomi. –