我有一系列c ++类存储在带有C接口的库中(参见下面的示例)。我有一个C程序,通过C接口包含这个c ++库。这似乎很有效,直到我尝试使用new
和delete
在库中创建一个类。
我正在使用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。请参阅下面的评论以获取更多信
答案 0 :(得分:10)
引用unapersson:它不是在C ++运行时链接。您应该使用“g ++”作为链接命令,而不是“gcc”。