2010-04-08 8 views
8

Ho probabilmente ciò che è un problema semplice, ma non c'è nessun errore informativi o avvisi durante la compilazione mi attenti a ciò che sta andando male.Simbolo Not Found, previsto nel piano Namespace objC++

Ho un app Objective-C++ che include un C++ principali e objc file di intestazione.

Costruisce bene, ma quando viene eseguito, dà questo messaggio di errore:

Dyld Error Message: 
    Symbol not found: _OBJC_CLASS_$_AppController 
    Referenced from: /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix 
    Expected in: flat namespace 
in /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix 

Nessuna quantità di Googling ha portato a una soluzione, e sono sicuro che ho appena perso una compilation o costruire opzione da qualche parte.

"AppController.h" è incluso nella destinazione (contrassegnato) e #import 'd nel file di classe ObjC.

Qualsiasi aiuto è molto apprezzato.

objC++ mi dà sempre un mal di testa.

Grazie,

-S!

risposta

5

Chiaramente classe AppController manca. La classe AppController è definita in un framework di una libreria dinamica? In tal caso, quando esegui l'app, sa dove trovare le librerie/framework?

questo è un problema linker, tra l'altro. I file di intestazione sono irrilevanti. Sono i file .m o .mm che devi guardare.

+1

Sì, in realtà, si trattava di un problema di spazio dei nomi nel file .m che includeva l'AppController.h che causava il non essere affatto nel file binario. GCC non ha lanciato errori, quindi non avevo idea di cosa fosse sbagliato. Grazie. –

1

Non sono sicuro se questo è il tuo problema, ma stavo avendo un problema simile con una dll C++, che mi ha richiesto tutto il giorno per eseguire il debug. Non ho programmato in C++ per circa 15 anni, e durante il tentativo di scrivere una funzione virtuale pura, ho usato la sintassi familiare "void f virtuale();" - oops. In C++ dovrebbe essere "virtual void f() == 0;" L'ultima versione di gcc su mac OSX 10.9.2 compila felicemente il codice.

Penso che sia una dichiarazione di inoltro perfettamente legale ... tuttavia, non sono sicuro che il C++ consenta alle classi di estendersi su più file, quindi sembra che questo debba essere contrassegnato (poiché nessuna implementazione viene mai fornita nel file CXX). qualsiasi evento, il simbolo lo inserisce nel codice oggetto e il linker non si lamenta mai, quindi si finisce con il riferimento mancante. Spero che questo aiuti qualcuno.

+0

Questo mi ha sicuramente aiutato. Grazie per il suggerimento. Ho dimenticato di aggiungere '= 0' a uno dei metodi della mia classe astratta. –