Linux下C++编译成动态链接库,以及C语言调用例子
时间:2010-05-18 来源:lzn_sc
最近项目需要C的接口,考虑到后面的应用可能复杂,纯C的开发效率不佳,故使用C++开发,extern出C的接口.
例子:
CppCode.cpp
Java代码
CCode.c
Java代码
文件都放在/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
初步还是可以用的,效率之类要测试才知道.
注: 这个是测试用的,各位千万不能这样用指针啊,^^!.
例子:
CppCode.cpp
Java代码
- #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;
- }
#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
Java代码
- #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;
- }
#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
初步还是可以用的,效率之类要测试才知道.
注: 这个是测试用的,各位千万不能这样用指针啊,^^!.
相关阅读 更多 +