Wie macht man ein Makefile?



  • hi,
    das ganze wird dann kompiliert und ich bekomme eine undefined reference to "alaw2linear" er findet also die Funktionen nicht. Diese Funktionen sind in einer .c definert, bzw. in einer .H deklariert und zwar als extern "C" Funktionen. Also klappt da wohl beim Linken was nicht



  • Naja, die Dateien musst du zum Projekt hinzufügen. Oder wenn du eine lib hast, halt die die library. Dann sollte der Linkerfehler verschwinden.
    Wozu gehört denn diese ominöse Datei ??

    rya.
    Scorcher24



  • wie meinst du das mit "zum Projekt hinzufügen"? Ich hab doch bei g++ kein Projekt in dem Sinn oder? In den anderen cpp Files werden alle h's Includiert. Aber das reicht ja anscheinend nicht.
    Wozu die Datei gehört?? Das sind Funktionen die ich früher mal in C programmiert habe und die ich jetzt in meinem cpp Programm einbinden will.



  • Wenn du eine Funktion in einem Programm verwendest, musst du dem compiler sagen, wo er die symbole dazu findet. Das einfachste ist, die Datei mitzulinken. Also nimm den gcc aufruf von vorhin und füg die Datei einfach an. Dann sollte dieses unbefriedigte Symbol verschwinden.
    rya.
    Scorcher24

    edit: Mir geht ein Licht auf:
    Wenn du zu der .c Datei einen Header hast, schreib mal extern"C" über die Deklarierung, bzw. deklarier mal die Datei so in einer .cpp Datei:

    extern "C" void foo();
    

    Man kann sich alternativ ein Makro basteln:

    #ifdef _clpusplus
    #define EXTERN_C extern "C"
    #endif
    


  • Die Fehlermeldungen von vorher sind dann weg. Dafür bekomme ich dann
    file not recognized: File format not recognized
    collect2: ld returned 1 exit status

    irgendwas gefällt dem Compiler an dem File nicht.
    Naja vielleicht ist #ifndef... und extern int... nicht ANSI-Konform und das muß es auf der SUN sein??? 😕 keine Ahnung.
    Aber das ärgert mich echt 😡 Wieso muß der scheiß g++ Compiler und das make auf Linux anders reagieren als auf einer Sun.



  • Du hast geschrieben dass du eine Lib verwendest.
    Woher stammt die ?? Ist die nativ von Linux?? Wenn Sie zu Solaris oder Windows gehört kannstes vergessen, weil jedes OS seine eigenen Symbole und auch ne andere Methode verwendet um Librarys, bzw dlls anzulegen.
    rya.
    Scorcher24



  • Also erst zu deinem alten Beitrag, also das mit dem "extern C" habe ich drinnen. ZWar etwas anders, aber sollte auch funktionieren. Vielleicht ändere ich das aber mal zum testen.
    Und zu deinem letzten Post, die Lib hab ich inzwischen rausgeschmissen. Ich hab da eine Funktion benutzt auf die ich aber nicht angewiesen war.

    Ursprünglich sollte das ganze ein Programm an der Uni sein was auf einem normalen PC (intel/AMD) läuft. Aber jetzt sollte es auch auf einer SUN laufen, bzw. etwas wo Bigendian nutzt.

    Naja ich muß nun leider einkaufen gehen. Aber vielleicht fällt dir ja noch was ein *hoff* ansonsten geh ich spätestens nächste Woche wieder an die Uni (ist ja vorlesungsfreie Zeit) und dann mach ich weiter. Irgendwo muß das Problem ja liegen. Und eine Lösung muß es ja auch geben... hoffe ich.

    Danke auf jeden Fall für deine Hilfe 👍


Anmelden zum Antworten