• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

g++ - fscked up?

Westbär

Weißer Winterglockenapfel
Registriert
06.04.07
Beiträge
881
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ß
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Dumme Frage: Hat Dein C++-Programm überhaupt eine Funktion main()? Hast Du mal Beispielcode?
 

Westbär

Weißer Winterglockenapfel
Registriert
06.04.07
Beiträge
881
Code:
#include <iostream>

int main() {
    std::cout << "blub";
}

Funktioniert mit dem, als auch mit Librarys nicht.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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
 

Westbär

Weißer Winterglockenapfel
Registriert
06.04.07
Beiträge
881
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$
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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?
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Zeig mal die Ausgabe von
Code:
nm blubb.o | grep -i main
d.h. enthält das Objektfile ein Symbol namens "main"?
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Kannst Du die Datei mal einfach hochladen?

Alex
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
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
 

Westbär

Weißer Winterglockenapfel
Registriert
06.04.07
Beiträge
881
@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

  • Archive.zip
    1,2 KB · Aufrufe: 80

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
@quarx:
Der Befehl gibt nix aus.
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?
 
  • Like
Reaktionen: Westbär

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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
 
  • Like
Reaktionen: Westbär

Westbär

Weißer Winterglockenapfel
Registriert
06.04.07
Beiträge
881
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

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ß
 

OlliD

Erdapfel
Registriert
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