XCode: Linker-Merkwürdigkeit...

Diskutiere mit über: XCode: Linker-Merkwürdigkeit... im Mac OS X Entwickler, Programmierer Forum

  1. der_Kay

    der_Kay Thread Starter MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    Registriert seit:
    02.09.2004
    Hallo zusammen,

    Folgendes Codefragment wird von XCode 2.2 ohne Warnung kompiliert und "gelinkt":
    Code:
    class A{ public: A(); }; int main () { A a; }
    Problem: Der Default-Konstruktor hat keinen Body. Beim Ausführen gibt es erwartungsgemäß ein SIGABORT. Das Linken wird vom g++ in der Shell korrekterweise verweigert.
    Da ich noch keinen tieferen Plan von XCode hab, frag ich mich, wie ich sicherstelle, dass mein Code korrekt erzeugt und gelinkt wird.

    Dieses "ZeroLink" ist übrigens deaktiviert.
     
  2. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.036
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    mich stören die "Editor-Zipper" immer , ich hab's daher mal
    augenfreundlich angeordnet: :)

    Code:
    class A { 
      public: 
        A(); // Body fehlt - einverstanden
    }; 
    
    int main () { 
      A a;  
    }
    

    Mein Verdacht:


    A(); ist ja syntaktisch korrekt, es handelt sich um die Deklaration einer C-Funktion.
    Das allein ist also keinen Fehler wert.
    Für den Compiler heißt das Implementierung kommt später. Das die gar nicht kommt kann er zu dem Zeitpunkt noch nicht wissen. Offenbar fällt das erst beim Starten auf, das der linker dafür keinen Symboleintrag generiert hat.
     
  3. der_Kay

    der_Kay Thread Starter MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    Registriert seit:
    02.09.2004
    Unmöglich, steht im Kontext einer Klassendeklaration.
    Genau dafür ist ein Linker aber da.

    Man kann XCode sogar diesen Blödsinn "kompilieren" und "linken" lassen:
    Code:
    class A
    {; }; 
    int main () 
    { 
        A a,b (a); 
        b=a; 
    }
    
    Hier werden ein nicht existenter Default- und Copy-Konstruktor sowie ein undefinierter A:: operator= aufgerufen. Einen undefinierten A:: operator+ merkt XCode dagegen. Dafür hab ich keine Erklärung. In der Shell wird das auch korrekt abgewehrt.
    Mir scheint, dass da irgendwas "inkrementell" gelinkt wird, um die Geschwindigkeit zu steigern. Würd mich interessieren, wie man sicherstellt, das 100%ig gelinkt wird.

    (A::operator sieht ja geil aus ;) )
     
    Zuletzt bearbeitet: 18.01.2006
  4. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.036
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    so eine Deklaration müßte trotzdem erlaubt sein. Dein zweites Beispiel ist wohl eher was für Comiler-Landwirte ;)
     
  5. Spacemojo

    Spacemojo MacUser Mitglied

    Beiträge:
    616
    Zustimmungen:
    21
    Registriert seit:
    16.05.2004
    Habt ihr das mit Debug order Release Konfiguration gemacht?
     
  6. der_Kay

    der_Kay Thread Starter MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    Registriert seit:
    02.09.2004
    Das zweite Beispiel kompiliert und läuft wider Erwarten. Aber das erste ist nach wie vor schräg. Ist "Debug", aber irgendwie glaub ich nicht, dass das einen Unterschied macht, denn der Linker sollte in jedem Fall die Symbole checken.
     
Die Seite wird geladen...
Ähnliche Themen - XCode Linker Merkwürdigkeit Forum Datum
Problem mit First Responder Mac OS X Entwickler, Programmierer 22.11.2016
Mit Xcode an bestehendem Git Hub Repository mitarbeiten Mac OS X Entwickler, Programmierer 09.11.2016
Exception in Persistent Document (missing Document.xib) Mac OS X Entwickler, Programmierer 24.10.2016
Eine Frage zu git: Commit funktioniert nicht mehr Mac OS X Entwickler, Programmierer 19.10.2016
Ich finde dieOption "All Exceptions" nicht mehr ! Mac OS X Entwickler, Programmierer 29.09.2016

Diese Seite empfehlen

Benutzerdefinierte Suche