XCode: Linker-Merkwürdigkeit...

  1. der_Kay

    der_Kay Thread StarterMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    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.
     
    der_Kay, 18.01.2006
  2. wegus

    wegusMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    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.
     
    wegus, 18.01.2006
  3. der_Kay

    der_Kay Thread StarterMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    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 ;) )
     
    der_Kay, 18.01.2006
  4. wegus

    wegusMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    so eine Deklaration müßte trotzdem erlaubt sein. Dein zweites Beispiel ist wohl eher was für Comiler-Landwirte ;)
     
    wegus, 18.01.2006
  5. Spacemojo

    SpacemojoMacUser Mitglied

    Mitglied seit:
    16.05.2004
    Beiträge:
    617
    Zustimmungen:
    21
    Habt ihr das mit Debug order Release Konfiguration gemacht?
     
    Spacemojo, 18.01.2006
  6. der_Kay

    der_Kay Thread StarterMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    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.
     
    der_Kay, 18.01.2006
Die Seite wird geladen...
Ähnliche Themen - XCode Linker Merkwürdigkeit
  1. Mankind75
    Antworten:
    10
    Aufrufe:
    298
    electricdawn
    21.06.2017
  2. Macy51
    Antworten:
    2
    Aufrufe:
    212
  3. Macy51
    Antworten:
    6
    Aufrufe:
    289
  4. Scherak
    Antworten:
    2
    Aufrufe:
    212
    Scherak
    15.04.2017
  5. just.do.it
    Antworten:
    5
    Aufrufe:
    937
    just.do.it
    09.07.2008