在c+中新建和删除+;从C程序调用的库 我有一系列C++类存储在一个C接口的库中(见下面的例子)。我有一个C程序,包括C++接口的C++接口。在我尝试使用new和delete在库中创建一个类之前,这似乎工作得很好 >我使用GCC编译C++代码和G++,C++语言在Enunu上用Eclipse对项目进行了装箱。

在c+中新建和删除+;从C程序调用的库 我有一系列C++类存储在一个C接口的库中(见下面的例子)。我有一个C程序,包括C++接口的C++接口。在我尝试使用new和delete在库中创建一个类之前,这似乎工作得很好 >我使用GCC编译C++代码和G++,C++语言在Enunu上用Eclipse对项目进行了装箱。,c++,c,gcc,g++,C++,C,Gcc,G++,我得到的错误消息是 undefined reference to 'operator new(unsigned int)' undefined reference to 'operator delete(void*)' 库H文件 #ifndef CFOO_H_ #define CFOO_H_ #ifdef __cplusplus class CBar { public: int i ; }; class CFoo { public: int wor

我得到的错误消息是

undefined reference to 'operator new(unsigned int)' 
undefined reference to 'operator delete(void*)' 
库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_ */
库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; 
}
我试过几次都没成功,有什么想法吗

编辑
看起来Eclipse生成的自动生成make文件有问题。一旦我手动地将C应用程序makefile更改为与g++链接而不是与gcc链接,我就能够构建应用程序了。请参阅下面的评论以获取更多信息。

< P>引用UNPassSung:C++中运行时不是链接。您应该使用“g++”作为链接命令,而不是“gcc”。

这是一个链接问题,而不是代码问题。你能告诉我们如何链接你的代码吗?它不是C++运行时的链接。你应该使用“g++”作为链接命令,而不是“GCC”。如果有任何C++代码在程序中,包含<代码>主< /代码>的翻译单元应该被编译为C++代码,而不是C代码。@ unopsson你是正确的,当我把make文件链接到G+GST+GCC的链接时,它就正确地建立了。我一开始就使用eclipse来制作makefile,甚至没有考虑过它。据说C++库是静态的,对吗?我相信一个动态库不应该有这样的问题。我如何与g++链接,但仍然使用gcc或clang编译?