在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编译?