Komischer Fehler in XCode

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Komischer Fehler in XCode

    Hallo,

    vielleicht kann mir ja von eucch jemand helfen.
    Ich muss ein kleine commandline c++ tool schreiben. Dieses Tool benutzt ein paar alte structs und funktionen von mir .

    C-Quellcode

    1. #include "PaceView.h"
    2. #include "global.h"
    3. int main(int argc, char** argv)
    4. {
    5. simdata_t simdata;
    6. initSimData(&simdata);
    7. return 0;
    8. }


    wie ihr seht nichts wildes bis jetzt. Mein Problem ist jetzt das es sich in XCode Kompilieren laesst aber wenn ich es ausfuehren o. debuggen will bekomme ich diese Fehlermeldung.

    [Session started at 2004-12-09 22:54:56 +0100.]
    ZeroLink: unknown symbol '__Z11initSimDataP9simdata_s'

    Executable “PaceView” has exited due to signal 6 (SIGABRT).

    Er geht nicht mal in initSimData rein echt komisch. In der Funktion wird nur memset aufgerufen.
    Was das komische daran ist. Wenn ich das tool auf der Commandline mit g++ -o Test PaceView.cpp global.c wrapper.c uebersetze geht alles wunderbar. Es liegt irgendwo an XCode.

    Danke fuer euere Hilfe
  • RE: Komischer Fehler in XCode

    hast du mal versucht zerolink abzuschalten? fuer so ein kleines programm ist das wohl nicht noetig, oder?

    ok, ist nur ein schuss ins blaue, aber IMHO besser als nichts...
    Mac Mini, 1.83 GHz Core 2 Duo, 2 GB, OSX 10.6.3, Xcode 3.2.2
    iPhone 3GS, 16 GB, OS 3.1.3
  • RE: Komischer Fehler in XCode

    So wie das für mich aussieht, fällst Du auf das "name mangling" von C++ rein. Du verwendest zwei alte C-Files (global.c und wrapper.c), die von Xcode normalerweise mit gcc compiliert werden, auf Deiner Kommandozeile aber mit g++. Damit findet im XCode-Fall der Linker die Funktionsnamen nicht mehr, da g++ die Namen von Funktionen beim Compilieren intern umbenennt (z.B. eben in __Z11initSimDataP9simdata_s). Da der "normale" gcc das nicht macht, hat der Linker keine Chance, die referenzierten Funktionen zu finden.

    Drei Abhilfen sind möglich:

    - entweder benennst Du global.c und wrapper.c jeweils in .cpp um

    - oder Du benennst PaceView.cpp in PaceView.c um (wenn Du keine C++-Konstrukte verwenden willst)

    - oder (die meiner Meinung nach "sauberere" Lösung) Du erweiterst PaceView.cpp um

    extern "C" {
    #include "PaceView.h"
    #include "Global.h"

    /* Prototyp */
    initSimData(simdata_t *simdata);
    }

    Damit sagst Du dem C++-Compiler, dass die Funktion initSimData eine reine C-Funktion ist (und evtl. weitere Defines, Datentypen etc. auch) und er für diese Funktionen das Name Mangling unterlassen soll.

    Michael
  • RE: Komischer Fehler in XCode

    Original von cuby
    So wie das für mich aussieht, fällst Du auf das "name mangling" von C++ rein.


    ich hab grade das gleiche problem mit SIGABRT. nur bei mir isses aber nicht C++ sondern C...

    hier ist mein code. nicht lachen, bin ja noch anfaenger.


    #include <Carbon/Carbon.h>
    #include <string.h>
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>

    #include <GLUT/glut.h>
    #include <OpenGL/glext.h>
    #include <OpenGL/gl.h>
    #include <OpenGL/glu.h>

    int gMainWindow;

    int main (int argc, const char * argv[])
    {
    glutInit(&argc, (char **)argv);
    //glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // non-stereo for main window
    //glutInitWindowPosition (300, 50);
    //glutInitWindowSize (800, 600);
    //gMainWindow = glutCreateWindow("GLUT Basics");

    //init(); // standard GL init

    return 0;
    }

    wenn ich die erste zeile von main() auskommentiere, meldet das fenster "...exited with status 0."
    wenn ich das ganze so wie es ist kompiliere und starte, bekomme ich folgende fehlermeldung:

    ZeroLink: unknown symbol '_glutInit'

    Executable “PFD” has exited due to signal 6 (SIGABRT).
    Mac Mini, 1.83 GHz Core 2 Duo, 2 GB, OSX 10.6.3, Xcode 3.2.2
    iPhone 3GS, 16 GB, OS 3.1.3
  • RE: Komischer Fehler in XCode

    da ist die frage wie ich zerolink abschalte. ich hab das target ausgewaehlt und die infos aufgerufen, und da war zerolink durchgestrichen. das heisst doch dass diese option irgendwo anders definiert ist, oder? fragt sich nur wo...
    Mac Mini, 1.83 GHz Core 2 Duo, 2 GB, OSX 10.6.3, Xcode 3.2.2
    iPhone 3GS, 16 GB, OS 3.1.3
  • RE: Komischer Fehler in XCode

    Sie ist in den build styles definiert, die du mit info auf das erste item in der file-liste auf der linken seite des hauptfensters abrufen kannst. Die Build styles sind auch die zweite auswahl im standard-fenster von Xcode. Einfach "Deployment" auswählen, nen clean build machen und alles wird ohne ZeroLink compiliert.

    Max
  • RE: Komischer Fehler in XCode

    Original von snowman
    das sieht doch mal so aus, dass bestimmte Libraries nicht mit ZeroLink funktionieren wollen.


    Quark. Ob man erst zur Laufzeit die Programmteile verlinkt (=Zerolink) oder wie im Deployment Build Style gleich von vorne herein, ist die gleiche Chose. Das hat nichts mit den Bibliotheken, bzw. Frameworks zu tun, die man verwendet. Man muß dem Linker halt sagen wogegen er eigentlich linken soll.

    In diesem Fall "/System/Library/Frameworks/GLUT.frameworks" aus dem Finder per Drag&Drop nach Xcode ins Verzeichnis Frameworks ziehen. Dann findet der Linker/ das Programm auch die Symbole, die er/ es braucht.

    t.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • RE: Komischer Fehler in XCode

    Original von tsunamix
    Original von snowman
    das sieht doch mal so aus, dass bestimmte Libraries nicht mit ZeroLink funktionieren wollen.


    Quark. Ob man erst zur Laufzeit die Programmteile verlinkt (=Zerolink) oder wie im Deployment Build Style gleich von vorne herein, ist die gleiche Chose. Das hat nichts mit den Bibliotheken, bzw. Frameworks zu tun, die man verwendet. Man muß dem Linker halt sagen wogegen er eigentlich linken soll.

    In diesem Fall "/System/Library/Frameworks/GLUT.frameworks" aus dem Finder per Drag&Drop nach Xcode ins Verzeichnis Frameworks ziehen. Dann findet der Linker/ das Programm auch die Symbole, die er/ es braucht.

    t.


    Daran hat es nicht gelegen. Ich habe vergessen es als extern C zu defienieren da der C++ Compiler alles zerstueckelt hat.
  • RE: Komischer Fehler in XCode

    Original von neosun
    Daran hat es nicht gelegen. Ich habe vergessen es als extern C zu defienieren da der C++ Compiler alles zerstueckelt hat.


    Ähh... Moment. Das war von mir auch keine Antwort auf Dein Posting. Das hatte sich ja schon erledigt. Sondern auf das Problem von User 'harry'.

    t.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • RE: Komischer Fehler in XCode

    Original von tsunamix
    In diesem Fall "/System/Library/Frameworks/GLUT.frameworks" aus dem Finder per Drag&Drop nach Xcode ins Verzeichnis Frameworks ziehen. Dann findet der Linker/ das Programm auch die Symbole, die er/ es braucht.

    t.


    hab ich gemacht, und der fehler war weg. nur: jetzt hab ich das gleiche problem mit der init-zeile:

    init(); // standard GL init

    fehlermeldung:

    ZeroLink: unknown symbol '_init'

    oder sowas. was fehlt denn da jetzt wieder?

    habe schon opengl.framework reingezogen, aber das hat das problem nicht geloest :(
    vielleicht eine header-datei?
    Mac Mini, 1.83 GHz Core 2 Duo, 2 GB, OSX 10.6.3, Xcode 3.2.2
    iPhone 3GS, 16 GB, OS 3.1.3