1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

g++ - fscked up?

Dieses Thema im Forum "iOS-Developer" wurde erstellt von Westbär, 16.07.08.

  1. Westbär

    Westbär Weißer Winterglockenapfel

    Dabei seit:
    06.04.07
    Beiträge:
    882
    Hallo,
    Erstmal, sorry für den Threadtitel *g*.

    Bei mir lässt sich seit dem iPhone SDK (oder evt früher, weiß nicht mehr sooo genau) nichts mehr im g++ kompilieren. Es kommt immer der Fehler
    Code:
    Undefined symbols:
      "_main", referenced from:
          start in crt1.10.5.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    
    Wenn ich jedoch eine C-App in GCC kompilieren will, funktioniert das tadellos. Nur bei C++-Apps und G++ (und deshalb auch C++ im Xcode und so weiter) nicht.

    Wisst ihr da was um das zu beheben?

    Vielen Dank schonmal :)

    Gruß
     
  2. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Dumme Frage: Hat Dein C++-Programm überhaupt eine Funktion main()? Hast Du mal Beispielcode?
     
  3. Westbär

    Westbär Weißer Winterglockenapfel

    Dabei seit:
    06.04.07
    Beiträge:
    882
    Code:
    #include <iostream>
    
    int main() {
        std::cout << "blub";
    }
    
    Funktioniert mit dem, als auch mit Librarys nicht.
     
  4. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Das geht nicht?
    Code:
    g++ blubb.cpp -o blubb
    ./blubb
    Hier kein Problem mit Xcode 3.1. Vielleicht mal neu drüberbügeln (gibt's ja jetzt auch ohne iPhone SDK zum Runterladen). Was sagt
    Code:
    g++ -v
     
  5. Westbär

    Westbär Weißer Winterglockenapfel

    Dabei seit:
    06.04.07
    Beiträge:
    882
    Neu draufbügeln hab ich schon probieren (und iPhone SDK macht mir nix aus, ich brauch das sogar).

    g++ -v sagt
    Code:
    admins-macbook:~ nicolas$ g++ -v
    Using built-in specs.
    Target: i686-apple-darwin9
    Configured with: /var/tmp/gcc/gcc-5484~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
    Thread model: posix
    gcc version 4.0.1 (Apple Inc. build 5484)
    admins-macbook:~ nicolas$ 
    
     
  6. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Mal aufdröseln in zwei Schritte:
    Code:
    g++ -c blubb.cpp -o blubb.o
    g++ blubb.o -o blubb
    Da schlägt der zweite Aufruf fehl?
     
  7. Westbär

    Westbär Weißer Winterglockenapfel

    Dabei seit:
    06.04.07
    Beiträge:
    882
    Jap, nur der zweite.
     
  8. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Zeig mal die Ausgabe von
    Code:
    nm blubb.o | grep -i main
    d.h. enthält das Objektfile ein Symbol namens "main"?
     
  9. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Kannst Du die Datei mal einfach hochladen?

    Alex
     
  10. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    gcc 3.3 oder 4.01 oder 4.2? gcc_select ist in den Betas des iPhone SDK irgendwie abhanden gekommen. o_O Vielleicht hilft es Xcode 3.1 drüberzu"bügeln" und nachher nicht das iPhone SDK zu installieren.
    Gruß Pepi
     
  11. Westbär

    Westbär Weißer Winterglockenapfel

    Dabei seit:
    06.04.07
    Beiträge:
    882
    @quarx:
    Der Befehl gibt nix aus.

    @below:
    Siehe Anhang

    @pepi:
    Könnte sein, mein GCC ist 4.0.1.
    Code:
    admins-macbook:~ nicolas$ gcc -v
    Using built-in specs.
    Target: i686-apple-darwin9
    Configured with: /var/tmp/gcc/gcc-5484~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
    Thread model: posix
    gcc version 4.0.1 (Apple Inc. build 5484)
    admins-macbook:~ nicolas$ 
    
    Wie gesagt, das iPhone SDK brauche ich.

    Gruß
     

    Anhänge:

  12. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Dann ist das Compilat im ArEimer und der Linker beschwert sich zu Recht.

    Ein kurzer Blick in den Quellcode file.c sagt mir, dass Du die main()-Routine direkt hinter die #include-Anweisung gesetzt hast, ohne Luft zu holen. Dann wird sie aber vom Präprozessor verschluckt und gelangt gar nicht erst zum Compiler. Mach mal nach #include <iostream> einen Return. Klappt's dann?
     
    Westbär gefällt das.
  13. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Was für einen intel Mac üblicherweise in Ordnung ist.
    Gruß Pepi
     
    Westbär gefällt das.
  14. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Man kann zwar in C ziemlich unleserlichen Code schreiben, aber zumindest hinter dem

    #include <iostream>

    solltest Du ein Newline haben. Dann klappt's auch mit dem Compile. Sonst wird alles hinter dem > ignoriert

    Alex
     
    Westbär gefällt das.
  15. Westbär

    Westbär Weißer Winterglockenapfel

    Dabei seit:
    06.04.07
    Beiträge:
    882
    Hmm jetzt funktioniert es.
    Seltsam, manchmal funktionierte es auch so nicht.

    Naja, wie dem auch sei. Vielen, Vielen Dank an below, quarx und pepi :)

    Gruß
     
  16. OlliD

    OlliD Erdapfel

    Dabei seit:
    17.03.09
    Beiträge:
    2
    Hallo,

    ich muss diesen Threat mal gerade wieder zum leben erwecken ;). Bei mir hat sich ein ganz ähnliches Problem beim bauen einer lib ergeben.

    Ich bekomme den folgenden Fehler:

    Code:
    Undefined symbols:
      "_main", referenced from:
          start in crt1.10.5.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make[2]: *** [libutilBasicObjectClasses.so.7.5] Error 1
    make[1]: *** [all] Error 2
    make: *** [all] Error 2
    
    Nur meine Source hat gar keine main - es sollte nur eine lib gebaut werden. Man sollte vielleicht noch dazu sagen, dass die ich die lib gerade von Linux auf OSX portiere.

    Kann mir vielleicht wer nen Tipp geben?

    Vielen Dank,
    Olli
     

Diese Seite empfehlen