Warum kann ich nicht verknüpfen eines gemischten C/C++ statische Bibliothek, die eine C-Schnittstelle mit gcc?

Habe ich ein gemischtes C/C++ - Bibliothek.

Außen stellt eine C-Schnittstelle mittels extern C. Intern gibt es Vorlagen und Klassen. Die Erstellung der Bibliothek mit "ar" stellte keine Probleme. Die Datei heißt libo-client.ein.

Jedoch, wenn die Verknüpfung der .a Datei mit gcc (nicht g++) bekomme ich viele Fehler, die wie folgt Aussehen:

libo-client.a(mysocket.o):(.rodata._ZTV7mStream[vtable for mStream]+0x10): undefined reference to `__cxa_pure_virtual'
...
mysocket.cpp:(.text+0x15ad): undefined reference to `operator new[](unsigned long)'
mysocket.cpp:(.text+0x15c1): undefined reference to `operator delete(void*)'
mysocket.cpp:(.text+0x167a): undefined reference to `__cxa_allocate_exception'
mysocket.cpp:(.text+0x16a6): undefined reference to `__cxa_throw'
...

Meine compile - /link-Zeile sieht wie folgt aus:

gcc $(CFLAGS) $(INCLUDES) test2.c libo-client.a -o test2 

Wo test2 ist meine Testumgebung.

Dieses problem tritt nicht auf, wenn ich mit g++. Allerdings werde ich, um Schnittstelle dieser Bibliothek in C-Projekt kompiliert mit gcc. Wie bekomme ich dieses? Was ist die Ursache davon?

EDIT:

Obwohl ich nicht die standard-C++ - Bibliothek, es ist offensichtlich benötigen einige Dinge, die like-operator new/delete etc. und es gibt Ausnahmen intern.

Ich verlinkt bin, dieses Ding gegen den Xen-hypervisor, also bin ich nicht sicher, welche Optionen ich habe aber völlig umschreiben diese Sache oder vielleicht versuchen, kompilieren von Xen mit G++ statt?

  • So dass es eine dynamische Bibliothek könnte auch helfen. Haben Sie schaute in das überhaupt?
  • Danke Chris. Das funktioniert tatsächlich als ein dynamic shared object.
InformationsquelleAutor Matt | 2011-09-13
Schreibe einen Kommentar