如何在 C++ 中调用 C 函数,在 C 中调用 C++ 函数
有时需要将 C 和 C++ 代码混合在一起。例如,在使用遗留 C 代码或使用特定 C 库时,可为您的 C++ 代码提供某些特定功能。因此,在 C++ 文件中使用 C 代码时需要注意一些特殊步骤,反之亦然。
本文通过一些示例讨论了混合 C/C++ 代码所需的步骤。
1.从C++调用C函数
在本节中,我们将讨论如何从 C++ 代码调用 C 函数。
这是C代码(Cfile.c):
#include <stdio.h>
void f(void)
{
printf("\n This is a C code\n");
}
第一步是创建此 C 代码的库。以下步骤创建一个共享库:
$ gcc -c -Wall -Werror -fPIC Cfile.c
$ gcc -shared -o libCfile.so Cfile.o
共享库 libCfile.so 是上述两个命令的结果。
这是主要的 C++ 代码 (main.cpp):
#include <iostream>
extern "C" {
void f();
}
void func(void)
{
std::cout<<"\n being used within C++ code\n";
}
int main(void)
{
f();
func();
return 0;
}
C 函数 f() 在符号 extern “C” 中声明,以告诉 cpp 编译器它具有 C 类型链接。
现在,编译代码编译代码(确保共享库 libCfile.so 链接到代码):
$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile
在运行可执行文件之前,请确保共享库的路径包含在环境变量 LD_LIBRARY_PATH 中。
$ export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
现在运行可执行文件'main':现在运行可执行文件'main':
$ ./main
This is a C code
being used within C++ code
所以我们看到从 C++ 代码中成功调用了一个 C 函数。
此外,请阅读之前发的博客获取有关如何在 Linux 中创建共享库的详细信息。
2.从C调用C++函数
在本节中,我们将讨论如何从 C 代码调用 C++ 函数。
这是一个 C++ 代码(CPPfile.cpp):
#include <iostream>
void func(void)
{
std::cout<<"\n This is a C++ code\n";
}
我们将看到如何从 C 代码中调用函数 func()。
第一步是通过引入符号 extern “C” 来更改此函数的声明/定义。
第一步是通过引入符号 extern “C” 来更改此函数的声明/定义。
#include <iostream>
extern "C" void func(void)
{
std::cout<<"\n This is a C++ code\n";
}
下一步是根据上面的代码创建一个库。以下步骤创建共享库:
g++ -c -Wall -Werror -fPIC CPPfile.cpp
$ g++ -shared -o libCPPfile.so CPPfile.o
上述命令应生成 libCPPfile.so 共享库。上述命令应生成 libCPPfile.so 共享库。
以下是 C 语言 (main.c) 的主要代码:
#include <stdio.h>
extern void func(void);
void f(void)
{
printf("\n being used within C code\n");
}
int main(void)
{
func();
f();
return 0;
}
请注意,C++ 函数在这里被声明为 extern。
像这样编译 C 代码 (main.c):
gcc -L/home/himanshu/practice/ -Wall main.c -o main -lCPPfile
并将当前目录路径添加到环境变量 LD_LIBRARY _PATH
export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
现在运行可执行文件'main':
$ ./main
This is a C++ code
being used within C code
上面的输出表明从 C 代码中成功调用了 C++ 函数。
- 点赞
- 收藏
- 关注作者
评论(0)