红联Linux门户
Linux帮助

将编写的C++文件在linux下编写so文件

发布时间:2017-03-15 10:09:47来源:linux网站作者:野狼位位
1,需要的头文件和cpp 文件
==========test.h===========
#ifdef __cplusplus //  注意,这里是双下划线!
extern "C"
{
#endif 
class Test{      //有类写类,没有就不写了
public:
int hello(int i);
};
int helloT(int j);
#ifdef __cplusplus
}
#endif 
==========test.cpp===========  这里是你的cpp文件,需要执行的文件
#include"test.h"
#include<iostream>
using namespace std;
int Test::hello(int i){
if(i>3)
cout<<"hello Class Test>3"<<endl;
else
cout<<"hello Class Test<3"<<endl;
return 0;
}
int helloT(int j){
Test *t=new Test();
t->hello(j);
return 0;
}
编译test.cpp文件
g++ -shared -fpic -lm -ldl -o libtest.so test.cpp
(g++ -shared -fpic -lm -ldl -lstdc++  -o libwavelet2d.so wavelet2d.cpp   这里添加了-lstdc++用来连接C++的头文件中添加的库)
其中,so文件名必须以lib开头。编译具体指令请参考帮助文档。
 
2,到这里基本就能得到需要的so文件了,但是注意其中的文件的名称就可以了。
 
3,(测试用的)如果编译出错,就要进行测试了,写一个main文件,将.h文件加载在头文件中,写一个测试程序,将变量配置好文件就可以了;在进行编译的命令是:
gcc -o test main.cpp -L.  -lwavelet2d  -lstdc++
gcc -ggdb3 -Wall  -o test main.cpp -L.  -lwavelet2d  -lstdc++
在下面有一个相似流程的文件,这里的不同之处就是为了防止C++库不能加载,添加了 -lstdc++命令。
 
4,修改环境变量:修改LD_LIBRARY_PATH变量,加上库所在的目录,这里是当前目录
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. 
 
5,查看生成的so文件,查看其中的函数;nm -D *.so 或者使用$ nm *.so |grep 函数名
 
6,ldd *.so用来查看生成的.so文件中,其中的文件都是可用的。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/29190.html