У меня есть смешанная библиотека C / C ++.
Снаружи она предоставляет интерфейс C с использованием внешнего языка C. Внутри есть шаблоны и классы.Создание библиотеки с помощью «ar» не представляло проблем.Файл называется libo-client.a.
Однако при связывании файла .a
с использованием gcc (не g ++) я получаю множество ошибок, которые выглядят следующим образом:
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'
...
Моя строка компиляции / ссылки выглядит следующим образом:
gcc $(CFLAGS) $(INCLUDES) test2.c libo-client.a -o test2
Где test2 - мой тестовый комплект.
Эта проблема не возникает, когда я использую g ++.Однако я собираюсь связать эту библиотеку с проектом C, который скомпилирован с помощью gcc.Как мне обойти это?В чем причина?
РЕДАКТИРОВАТЬ:
Несмотря на то, что я не использую стандартную библиотеку C ++, очевидно, что нужны некоторые вещи, такие как оператор new / delete и т. Д., Иесть внутренние исключения.
Я связываю эту штуку с гипервизором Xen, поэтому я не уверен, какие у меня есть варианты, но полностью переписать эту штуку или, возможно, попробовать вместо этого скомпилировать Xen с G ++?