Error: "Undefined symbols: "

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Luleå
  • 2008-06-24 01:42

Hej,

Jag arbetar med Xcode (och ett litet projekt skrivet i C++ och med SDL, vilket jag tror är oviktigt för denna fråga). Jag har precis rättat till en massa fel och tycker allt borde fungera när jag får detta felmeddelande:

"Undefined symbols: "

Det är precis så det är beskrivet. Inga symboler visas! Felet befinner sig tydligen vid "SDLStart:0", där "SDLStart" är vad jag kallar projektet och "0" antagligen skulle vara rad 0. I vanliga fall står där ju någonting i stil med "main.cpp:35", filnamn och rad där felet befinner sig.

Jag får även en varning:

"warning prebinding disabled because of undefined symbols"

Jag misstänker smått att felet har med en oönskad effekt av en oanad tangenttryckning att göra.

Hjälp!

  • Medlem
  • Östersund
  • 2008-06-24 09:46

Tyvärr är det inte lätt att ge ett hjälpsamt svar.

Jag kan inte tipsa om annat än att det troligen är ett länkfel, alltså uppkommet i länksteget när du bygger. "Vanliga" fel - de som dyker upp och pekar på en källkodsrad - upptäcks av kompilatorn i ett tidigare steg. De är ofta lättare att finna orsaken till.

Kompilering (och förprocessning) förvandlar .h .c .cpp .m filer till --> .o
Länkarn tar objektfilerna (.o-filer) och sätter ihop dem till en applikation i ditt fall.

Länkarn ser inte på din källkod, så den kommer inte att peka ut radnummer vid fel. Däremot ser den i objektfilerna referenser till funktioner, globala/statiska variabler. Man kan säga att varje objektfil presenterar sådana referenser (exporterar symboler) men också ställer krav på att någon annan objektfil presenterar specifika referenser (en importerad symbol).

I ditt fall kanske någon .o-fil inte är med i bygget längre... så att någon symbol SDLStart inte finns med. Spana runt lite om du på något sätt har lyckats exkludera en fil nånstans. Brevid filnamnen (på .c, .cpp, .m) i projektet ska det vara en bock som visar att det är med i den "target" du bygger. Notera att man kan lyckas få till så att en fil är med i release men inte i debug-targeten.

  • Medlem
  • Östersund
  • 2008-06-24 09:51

Det skulle också kunna vara att någon SDL-relevant brytare är felinställd/borta.

Om koden t ex innehåller
#ifdef ENABLE_SOME_SPECIAL_STUFF

så kan källkod "försvinna" (tas bort av preparsern) om den brytaren ENABLE_SOME_SPECIAL_STUFF inte är satt som gcc-argument

  • Medlem
  • Luleå
  • 2008-06-26 14:36

Tack defun!
Jag hittade problemet, som bara var att jag hade glömt implementera en constructor. Tack vare dina förklaringar förstår jag lite varför jag får det felmeddelande jag får, men jag tycker inte att det är särskilt hjälpsamt, eller ens lämpligt (felmeddelandet alltså).

  • Medlem
  • Mölndal
  • 2008-06-26 16:35

Du är diplomatisk... jag tycker det är ruttet dåligt!

1
Bevaka tråden