new и delete в библиотеке c ++, вызываемой из программы на C - PullRequest
7 голосов
/ 03 мая 2011

У меня есть серия классов 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, я смог создать приложение. Смотрите комментарии ниже для получения дополнительной информации.

1 Ответ

10 голосов
/ 03 мая 2011

Цитата unapersson: Это не соединение во время выполнения C ++. Вы должны использовать "g ++" в качестве команды ссылки, а не "gcc".

...