Linux下C++编译成动态链接库,以及C语言调用例子

本文介绍了一个使用C++开发并对外提供C接口的例子。通过一个简单的字符串操作函数,展示了如何在C++中实现功能,并通过extern C确保可以被C代码调用。该示例包括C++源代码的编写、编译为共享库,以及C代码如何链接并调用这些函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目需要C的接口,考虑到后面的应用可能复杂,纯C的开发效率不佳,故使用C++开发,extern出C的接口.
例子:
CppCode.cpp

#include <string>
using namespace std;
extern "C" char* getNewString(char* inputStr)
{
string cppString=string(inputStr);
cppString.append("appender");
cppString.copy(inputStr,cppString.size(),0);
return inputStr;
}

CCode.c

#include <stdio.h>
int main()
{
char* val=(char*)malloc(50*sizeof(char));
strcpy(val,"HI,this is Thunderclock"); //must be less than 50 chars
val=getNewString(val);
printf("New String is %s \n",val);
return 0;
}

文件都放在/root/cpp下
编译成so文件
root@pvz:~/cpp# g++ -fPIC -shared -o cppTestLib.so CppCode.cpp
编译C成可执行
root@pvz:~/cpp# gcc CCode.c /root/cpp/cppTestLib.so -o testc
执行结果
New String is HI,this is Thunderclockappender

初步还是可以用的,效率之类要测试才知道.
注: 这个是测试用的,各位千万不能这样用指针啊,^^!.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值