У меня есть серия классов C ++, хранящихся в библиотеке с интерфейсом C (см. Пример ниже). И у меня есть программа на C, которая включает эту библиотеку c ++ через интерфейс C. Кажется, это работало хорошо, пока я не попытался создать класс в библиотеке с new
и delete
.
Я использую gcc для компиляции кода C и g ++ для библиотеки C ++, я написал проекты с Eclipse на unbunu.
Я получаю сообщение об ошибке:
undefined reference to 'operator new(unsigned int)'
undefined reference to 'operator delete(void*)'
Libary H file
#ifndef CFOO_H_
#define CFOO_H_
#ifdef __cplusplus
class CBar {
public:
int i ;
};
class CFoo {
public:
int work();
};
extern CFoo g_foo ;
extern "C" {
#endif /* __cplusplus */
int foo_bar( ) ;
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* CFOO_H_ */
Файл Libar cpp
#include "CFoo.h"
CFoo g_foo ;
int CFoo::work() {
CBar * b = new CBar();
delete b;
return 1;
}
int foo_bar( ) {
return g_foo.work( );
}
Основной файл c
void * __gxx_personality_v0 ;
int main(void) {
printf( "foo_bar 10 =%d\n", foo_bar() ) ;
return 0;
}
Я пробовал несколько вещей без успеха, есть мысли?
Редактировать
Похоже, это была проблема с автоматически сгенерированными файлами make, созданными Eclipse. Как только я вручную изменил make-файл приложений C для связи с g ++ вместо gcc, я смог создать приложение. Смотрите комментарии ниже для получения дополнительной информации.