gpt4 book ai didi

c++ - 为 C 应用程序使用 C++ 库

转载 作者:太空狗 更新时间:2023-10-29 21:20:34 25 4
gpt4 key购买 nike

我有一个 C 语言的命令行(+HTTP 接口(interface))音频应用程序,目前正在 Mac OSX 上使用 gcc 进行编译,但我想让这个应用程序与 linux 兼容。

但是,我想使用 freeverb3 库。这是在 C++ 中。我不想将所有代码都转换为 C++。我(据我所知)不需要从 C++ 调用任何 C 代码,也不需要在我的 C 代码中使用 C++ 对象。就我的主应用程序和 C++ 代码的交互而言,传递 double 组和一些整数作为参数的简单方法调用将是我所需要的。

通过一些快速的谷歌搜索,我似乎可以编写一个 C++ 接口(interface)模块,然后可以公开一些我可以调用以使用 freeverb3 的 c 兼容函数。我已经编写了一个微型示例来了解它是如何工作的。对于这个示例,我有一个名为 test.cpp 的虚拟 C++ 文件:

#include <iostream>
using namespace std;

class test_class
{
int a;

public:

int get_a();
void set_a( int v );
};

int test_class::get_a()
{
return a;
}

void test_class::set_a( int v )
{
a = v;
}

static test_class *c;

extern "C"
{
void init();
void set( int v );
int get();
}

void init()
{
c = new test_class();
}

void set( int v )
{
c->set_a( v );
}

int get()
{
return c->get_a();
}

我有一个调用函数的虚拟 c 文件:

#include <stdio.h>

/* Forward declaratoins for extern "C" functions in C++ code */

void init();
int get();
void set( int v );

/* C language code that references functions in C++ code */

int main()
{
init();

set( 55 );
printf( "value: %d\n", get() );
set( get() + 12 );
printf( "value: %d\n", get() );
return 0;
}

而且,我有一个创建可执行文件的 makefile。

test: test.o user.o
g++ -o test user.o test.o

test.o: test.cpp
g++ -c test.cpp

user.o: user.c
gcc -c user.c

这是从 C 语言使用 C++ 代码的好方法吗?有没有更好/更复杂/更传统的方法来实现这个目标?

最佳答案

您可能想换个角度考虑。用 C++ 编写更高级别的应用程序,在需要的地方轻松调用 C++ 库,并从 C++ 级别调用所有当前的 C 模块。

恕我直言,这比用 C 作为高级来做同样的事情更容易实现。

关于c++ - 为 C 应用程序使用 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261492/

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