2011-12-30 12 views
28

ho utilizzato un quadro spinta dal link sottostante per il mio progetto iPhone Xcode: https://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.htmlXcode con boost: linker (Id) Attenzione sulle impostazioni di visibilità

funziona benissimo, ma ho sempre ottenere centinaia di Apple Mach- O Linker (id) Avvertimenti come:

accesso diretto in __ZN5boost15program_options6detail7cmdline24handle_additional_parserERSt6vectorISsSaISsEE al simbolo debole globale __ZTVN5boost17bad_function_callE significa il simbolo debole non può essere ignorata in fase di esecuzione. Ciò è stato probabilmente causato dalla compilazione di diverse unità di traduzione con diverse impostazioni di visibilità.

Come sbarazzarsi di tali avvisi nel codice?

Modificato: By impostato simboli nascosti per impostazione predefinita = YES, sono riuscito a sbarazzarsi della maggior parte degli avvertimenti, ma ci sono più 3 sinistra che non andrà via, qualcuno può dirmi perché?

modificato di nuovo: Dopo una ricostruzione, anche i restanti 3 avvisi sono scomparsi! Quindi la mia soluzione ha funzionato!

risposta

24

Doe appena capito come sbarazzarsi di centinaia di avvertimento in questo modo: insieme per un intero obiettivo o progetto con le simboli nascosta per impostazione predefinita accumulo impostazione SI

+2

Era 'affermativa il problema o la soluzione? :) – sarnold

+0

impostato su sì risolverà gli avvisi – Gob00st

+2

Come imbarazzante. Per me l'impostazione di Simboli nascosti per impostazione predefinita su No, ha rimosso avvisi simili provenienti dal collegamento a una libreria con Eigen. –

34

Se impulso è incluso da più progetti, ogni progetto devono avere gli stessi valori per

Symbols Hidden by Default 
Inline Methods Hidden 
+0

La seconda volta sono arrivato a questa risposta e mi ha aiutato a correggere l'avviso. Non ho idea di come il progetto avrebbe potuto finire con "Inline methods hidden" essere nuovamente fuori sincrono. Gli aggiornamenti Xcode l'hanno cambiato? Ugh .. –

+0

+1 Sì, a differenza della risposta che suggeriva solo "Simboli nascosti per impostazione predefinita" necessaria per la corrispondenza, ho trovato che "Inline Methods Hidden' * anche * doveva corrispondere. – aardvarkk

0

Se impulso è incluso di più progetti, ogni progetto deve avere gli stessi valori per

simboli nascosti per impostazione predefinita metodi Linea Nascosto

nerith detto è giusto, ma in Xcode 4.6.3, non è il "Simboli nascosta per impostazione predefinita" di cui sopra e "Metodi Inline Nascosto", e ho impostato il gcc_symbols_private_extern a sì, l'avviso è scomparso.

3

Il linker si lamenta delle diverse impostazioni di visibilità tra il progetto e Boost.

È inoltre possibile risolvere il problema ricompilando Boost con le stesse impostazioni di compatibilità.

Basta aggiungere

cxxflags=-fvisibility=hidden 

e

cxxflags=-fvisibility-inlines-hidden 

alla riga di comando bjam.

+4

-fvisibility = hidden implica -fvisibility-inlines-hidden. Solo il primo è necessario. – johnwbyrd

0

Ho anche avuto questo problema.

Si scopre che stavo distrattamente fare qualcosa di simile:

#pragma GCC visibility push(default) 
#include <SomeExternalLibrary.h> 
void myExampleSymbol(); 
#pragma GCC visibility pop 

che ho risolto modificando a:

#include <SomeExternalLibrary.h> 
#pragma GCC visibility push(default) 
void myExampleSymbol(); 
#pragma GCC visibility pop 
Problemi correlati