对于公共功能,需要将其封在在一个公共库中供其他模块调用,动态链接库是常有的一种方式,在Linux下的C++动态链接库实现及调用简介如下。
动态链接库功能封装在cpp和h中,定义如下:
task.h
void action();
实现在task.cpp
#include <iostream>
using namespace std;
void action(){
cout<<"call dll library action."<<endl;
}
生成动态链接库命令:
g++ -fIPC -shared -o libtask.so task.cpp
-fIPC -shared 是必须的,IPC是指位置无关代码,是动态链接库装入方式。
.h 中可以看成是接口定义,so中是实现,调用模块源代码中只需要包含.h文件即可,然后就可以使用.h中定义的函数,如下:
test.cpp
#include "task.h"
int main() {
action();
}
编译test.cpp命令行:
g++ -o test test.cpp libtask.so
运行test之前需要将libtask.so复制到/usr/lib,或者在LD_LIBRARY_PATH中将当前目录加入其中,否则会报cannot open shared object file: No such file or directory。
网友评论