从C程序调用的c ++库中的new和delete

时间:2011-05-03 18:14:42

标签: c++ c gcc g++

我有一系列c ++类存储在带有C接口的库中(参见下面的示例)。我有一个C程序,通过C接口包含这个c ++库。这似乎很有效,直到我尝试使用newdelete在库中创建一个类。

我正在使用gcc为C ++库编译C代码和g ++,我在unbunu上使用Eclipse创建了项目。

我收到的错误消息是

undefined reference to 'operator new(unsigned int)' 
undefined reference to 'operator delete(void*)' 

Libary H文件

#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_ */

Libary 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( );
}

主要文件

void * __gxx_personality_v0 ;
int main(void) {
printf( "foo_bar 10   =%d\n", foo_bar() ) ;
     return 0; 
}

我尝试了一些没有成功的事情,有什么想法吗?

修改

看起来这是由Eclipse生成的自动生成的make文件的问题。一旦我手动将C applcations makefile更改为与g ++而不是gcc链接,我就能够构建applcation。请参阅下面的评论以获取更多信

1 个答案:

答案 0 :(得分:10)

引用unapersson:它不是在C ++运行时链接。您应该使用“g ++”作为链接命令,而不是“gcc”。