Sto cercando di compilare il codice di esempio "SonofGrab" utilizzando XCode 4.5.1 su OS X 10.8.Errore di collegamento per funzioni inline
Una funzione è definita come questo in controller.m
inline uint32_t ChangeBits(uint32_t currentBits, uint32_t flagsToChange, BOOL setFlags);
Questo porta a questo messaggio di errore:
Undefined symbols for architecture x86_64:
"_ChangeBits", referenced from:
-[Controller awakeFromNib] in Controller.o
[...]
ld: symbol(s) not found for architecture x86_64
rimozione della messa in linea delle ChangeBits funzione risolve il problema, ma perché fa il linker non trova i cambiamenti con la definizione originale?
Non ricordo di aver riscontrato questo problema su OS X 10.7 con lo stesso codice di esempio. Sono stati apportati alcuni cambiamenti al clang che hanno infranto questo codice? – alecail
Probabilmente perché prima stavate usando GCC o LLVM-GCC. LLVM-GCC è pensato per essere compatibile con GCC, cioè produrre gli stessi risultati. Ora stai usando completamente Clang, stai vedendo l'errore come nell'esatta cosa descritta nei documenti LLVM a cui mi sono collegato. – mattjgalloway
Mi sono imbattuto in questo problema e la risposta di mattjgalloway l'ha risolto. Giusto per essere più chiaro, in Controller.m, riga 71, aggiungi "statico" davanti a "in linea". –