Hallo,
bin eigentlich Windoof - Programmierer und habe jetzt mein erstes Linux - Programm geschrieben. Es ist in C++ geschrieben (also g++ Compiler). Jetzt möchte ich die libnetfilter_queue und die libnfnetlink - Bibliothek dazulinken. Der Linker findet die Abhängigkeiten aber nicht. In Windows wäre die Sache klar: Da die Bibliotheksfunktionen in C geschrieben und compiliert sind (gcc), muss ich die externen Funktionen als extern "C" deklarieren, da die Funktionsnamen sonst gemangelt werden. Gibt's das in Linux auch? Kann ich nicht einfach den vorhandenen C - Code der Bibliothek in mein Programm einbinden - ist das eine gute Idee? Was meint ihr?
C und C++ Code linken
das "Mischen" von C und C++ ist unter Linux auch kein Problem:
Zum Linken solltest du "g++" verwenden. Früher konnte der "gcc" auch verwendet werden, das funktioniert aber jetzt nicht mehr:
Gruß
gms
Code: Alles auswählen
gms@gms1:~$ cat x1.c
#include <stdio.h>
void testfunc() {
printf("%s\n","in testfunc");
}
gms@gms1:~$ gcc -o x1.o -c x1.c
gms@gms1:~$ cat x2.cpp
extern "C" void testfunc();
class A {
public:
A() { testfunc(); }
};
int main() {
A a;
}
gms@gms1:~$ g++ -o x2.o -c x2.cpp
gms@gms1:~$ g++ -o x x1.o x2.o
gms@gms1:~$ ./x
in testfunc
was verstehtst du darunter ? Die Libraries mußt du explicit angebenHajoe hat geschrieben: Der Linker findet die Abhängigkeiten aber nicht.
Zum Linken solltest du "g++" verwenden. Früher konnte der "gcc" auch verwendet werden, das funktioniert aber jetzt nicht mehr:
Code: Alles auswählen
gms@gms1:~$ gcc -o x x1.o x2.o
x2.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
Gruß
gms
Re: C und C++ Code linken
Das gehört zum C++-Standard und geht daher natürlich auch unter dem GCC.Hajoe hat geschrieben:muss ich die externen Funktionen als extern "C" deklarieren, da die Funktionsnamen sonst gemangelt werden. Gibt's das in Linux auch?