LD linkt nicht



  • Hi,

    ich hab eine Datei main.cpp:

    #include "io.hpp"
    
    int main(void)
    {
        clrscr();
    }
    

    Der Header sieht so aus:

    #ifndef IO_INCLUDED
    #define IO_INCLUDED
    
    void clrscr(void);
    
    #endif
    

    Ich linke so:
    ld -e _main -Ttext 0x1000 -o kernel.o main.o io.o
    ld -i -e _main -Ttext 0x1000 -o kernel.o main.o io.o

    Und kriege als Fehler:
    main.o(.eh_frame+0x11):main.cpp: undefined reference to `__gxx_personality_v0'

    Warum? Diese Funktion wird nirgends verwendet!

    ChrisM



  • c++ hat viele coole features und viele davon sind nicht nur teil der sprache, sondern brauchen auch verschiedene symbole der standard lib.

    du musst also dein c++ programm so compilieren, dass der compiler diese features weglässt. dann musst du zb auch auf exceptions verzichten. sag mal, welchen compiler du verwendest...

    falls das g++ ist soltest du:
    -fno-exceptions dazu nehmen, ebenso wie -fno-builtin. wenn du auch noch bestimmte header dateien verwendest mit <> dann wäre -nostdinc -nostdinc++ auch klug.



  • Ich kompiliere so:
    [code]gcc -ffreestanding -c ../kernel/main.cpp -o main.o
    gcc -c ../kernel/io.cpp -o io.o[/code]

    ChrisM


Anmelden zum Antworten