gpt4 book ai didi

c++ - 从 C 程序调用的 C++ 库中的新建和删除

转载 作者:可可西里 更新时间:2023-11-01 18:27:37 26 4
gpt4 key购买 nike

我将一系列 C++ 类存储在具有 C 接口(interface)的库中(参见下面的示例)。我有一个 C 程序,它通过 C 接口(interface)包含这个 C++ 库。在我尝试使用 newdelete 在库中创建一个类之前,这似乎运作良好。

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

我得到的错误信息是

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 应用程序生成文件以与 g++ 而不是 gcc 链接,我就能够构建应用程序。有关详细信息,请参阅下面的评论。

最佳答案

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

关于c++ - 从 C 程序调用的 C++ 库中的新建和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com