2009-10-08 5 views
1

J'ai essayé de construire le projet logstalgia (http://code.google.com/p/logstalgia/) sur mon Mac (10.5). Plutôt que d'avoir à lier correctement les bibliothèques système, j'ai construit et ajouté toutes les dépendances au projet. Je suis nouveau à ce sujet, mais je pense que je l'ai fait correctement, principalement parce que j'ai eu deux de mes amis qui sont beaucoup plus expérimentés le disent.Symbole non défini _main en essayant de construire logstalgia sur mac

Ajout des cadres supprimés toutes les erreurs de compilation, mais je reçois toujours une erreur de l'éditeur de liens. Il semble ne pas pouvoir trouver la fonction main(). J'ai vérifié que j'ai inclus main.cpp dans les sources à compiler (en utilisant XCode) et qu'il n'y a pas de doubles déclarations accidentelles. J'ai également vérifié que la fonction principale est correctement déclarée (pas de parenthèses manquantes, etc.).

C'est comme si XCode ne liaient pas dans le bon ordre. Toute aide serait vraiment appréciée, je suis vraiment excité d'être à une seule erreur! (Espérons que cela n'ouvre pas une vanne).

Merci, Hamilton

PS - Je peux certainement fournir un zip du projet Xcode si quelqu'un est prêt à regarder!

Checking Dependencies 

Ld "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug/Untitled" normal i386 
    cd "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled" 
    setenv MACOSX_DEPLOYMENT_TARGET 10.5 
    /developer/usr/bin/g++-4.0 -arch i386 -isysroot /developer/SDKs/MacOSX10.5.sdk "-L/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug" -L/sw/lib "-L/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/../../pcre-7.9/.libs" -L/opt/local/lib -L/sw/lib "-F/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug" -F/Users/hamiltont/Downloads/logstalgia-0.9.2 -F2/src/SDL.framework "-F/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled" -filelist "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-normal/i386/Untitled.LinkFileList" -mmacosx-version-min=10.5 -framework OpenGL -lpcre -lSDL -lSDL_image-1.2.0 -prebind -o "/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Debug/Untitled" 
Undefined symbols: 
    "_main", referenced from: 
     start in crt1.10.5.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
+0

PS - Messages similaires: http://stackoverflow.com/questions/1494407/undefined-symbol-main-when-trying-to-build-shared-library-g-mac (ne pas essayer de construire une lib partagée) http://stackoverflow.com/questions/550455/compile-error-undefined-symbols-main-referenced-from-start-in-crt1-10-5-o (peut-être le même problème pour moi-même, mais je ne sais pas ne sais pas comment vérifier ceci) – Hamy

Répondre

1

J'ai obtenu cette erreur pour disparaître. Si je comprends bien, SDL nomme essentiellement la fonction principale, afin qu'elle puisse faire quelque chose, puis lancez votre application, puis nettoyez. Il s'avère que si vous construisez dans Xcode, vous devez utiliser ObjectiveC pour compiler votre application.

Dans Xcode, dire à l'éditeur de liens d'essayer et d'utiliser SDL_main(), plutôt que simplement main() ne fonctionne pas (pour certaines raisons techniques qui sont un peu au-delà de moi). Donc, vous incluez quelques fichiers Objective C. En Oc, vous avez l'avantage de pouvoir dire explicitement quel est le nom de votre classe principale. Par conséquent, les fichiers Objective C que vous incluez semblent ne rien faire de plus que de laisser savoir à Xcode de rechercher SDL_main(). En résumé, cela n'avait vraiment rien à voir avec Logstalgia, mais était entièrement un problème avec SDL pour lier correctement dans Xcode. This link parle exactement de ce problème. Les fichiers SDLMain.h et SDLMain.m sont des fichiers Objective C. Si vous ne les trouvez pas, essayez googleing "Configuration des modèles SDL dans Xcode". J'ai installé les modèles dans Xcode, en ai utilisé un pour créer un projet vide qui compilerait, lierait et exécuterait (et ne ferait rien sans tarder!) Et j'ajouterais les fichiers de projet que je voulais au projet préconfiguré.

Merci!

0

Double-vérifier la liste des fichiers de lien pour rendre le fichier objet de vous main.cpp y est présent:

/Users/hamiltont/Downloads/logstalgia-0.9.2 2/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-normal/i386/Untitled.LinkFileList 

Vous pouvez également prétraiter le main.cpp pour vous assurer que principale n'est pas se faire par inadvertance renommer (via une macro escroc) ou omis (via un voyou #if).

+0

fbrereto, Merci pour la réponse rapide. J'ai vérifié le LinkFileList, et main.o était la première entrée.De plus, j'ai vérifié que le fichier principal n'était pas omis par une macro (heureusement, il n'est pas défini dans les macros). Je ne suis pas sûr de savoir s'il est renommé. Il y a un main.o présent dans le dossier de construction, qui semble indiquer qu'il n'est pas, mais je pourrais me tromper ici – Hamy

+0

Je suggérais ces contrôles pour la routine principale, pas le fichier main.cpp - désolé pour la confusion là. Vous pouvez pré-traiter un fichier en cliquant dessus avec le bouton droit de la souris dans XCode et en choisissant l'option dans le menu contextuel. Une fois que la sortie apparaîtra, vous aurez envie de faire défiler tout en bas du fichier, ça va être grand! Assurez-vous que l'apparence principale comme il se doit, a) existe et b) s'appelle ce que vous attendez. – fbrereto

+0

fbrereto, Je pense que vous avez raison à propos de la macro escroc! J'ai travaillé sur cela un peu plus - un nm main.o | grep principale montre que _SDL_main Je suis entré dans les en-têtes de cadre SDL, et SDLmain.h, je vois ceci: /* Fonction principale() de la demande doit être appelée avec liaison C, et doit être déclarée comme ceci: #ifdef __cplusplus extern "C" #endif \t int main (int argc, char * argv []) { \t \t} */define principale \t SDL_main /* le prototype de l'application de Main() Fonction */ extern C_LINKAGE int SDL_main (int argc, char * argv []); Une idée de ce que je dois faire? – Hamy

Questions connexes