C und C++ Code linken

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Hajoe
Beiträge: 82
Registriert: 28.03.2006 10:07:07

C und C++ Code linken

Beitrag von Hajoe » 01.07.2006 18:54:34

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?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 01.07.2006 19:42:01

das "Mischen" von C und C++ ist unter Linux auch kein Problem:

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
Hajoe hat geschrieben: Der Linker findet die Abhängigkeiten aber nicht.
was verstehtst du darunter ? Die Libraries mußt du explicit angeben 8)
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

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Re: C und C++ Code linken

Beitrag von Joghurt » 01.07.2006 20:08:15

Hajoe hat geschrieben:muss ich die externen Funktionen als extern "C" deklarieren, da die Funktionsnamen sonst gemangelt werden. Gibt's das in Linux auch?
Das gehört zum C++-Standard und geht daher natürlich auch unter dem GCC.

Antworten