Sto scrivendo una libreria statica riutilizzabile per iPhone, seguendo le istruzioni fornite here.Non esporre i simboli di una libreria utilizzata nella propria libreria statica
Voglio usare minizip
nella mia libreria internamente, ma non voglio esporlo all'utente.
Dovrebbe essere possibile per l'utente includere minizip stessi, possibilmente una versione diversa, e non causare conflitti con la mia versione "interna" minizip.
È possibile?
Edit:
Ho provato ad aggiungere -fvisibility=hidden
alle bandiere aggiuntive del compilatore per i file MINIZIP e le funzioni di modifica per essere __private_extern__
e __attribute__((visibility("hidden")))
, ma sembra ancora a produrre definiti simboli esterni:
00000918 T _unzOpen
0000058e T _unzOpen2
00001d06 T _unzOpenCurrentFile
00001d6b T _unzOpenCurrentFile2
...
Modifica # 2:
A quanto pare i simboli contrassegnati con questi le notazioni sono rese private dal linker, che non avviene mai quando Xcode crea i sorgenti, poiché aggiunge il parametro -c ("Compila o assembla i file sorgente, ma non link.")
Sei in grado/vuoi modificare la tua copia interna di minizip, e l'iPhone supporta lo spazio dei nomi a due livelli di Mach-O? Mi aspetto che la risposta ad entrambi dovrebbe essere sì. – ephemient
Sono disposto a modificare la mia copia, certo. Forse potrei avere tutti i simboli preceduti dal prefisso che uso per la mia libreria, in qualche modo?Non mi dispiacerebbe fare my_. Non so se gli spazi dei nomi a due livelli sono supportati su iPhone. –
Solo per i futuri Googler, potresti voler vedere questo, potrebbe essere utile: http://stackoverflow.com/a/14863432/311567 – dashesy