1. 前言
c++制作动态链接库,不复杂,在此记录下来。
下面:编写用一个类,然后做成一个动态库。
以后包含头文件,直接调用接口即可。不用再将.cpp源码文件也放进来了。
2. 代码
-----------------------------------------------------
dynamicmath.h文件 :
-----------------------------------------------------
#ifndef DYNAMICMATH_H #define DYNAMICMATH_H #include <iostream> class DynamicMath { public: DynamicMath(); ~DynamicMath(); static double add(double x,double y); static double sub(double x,double y); static double mul(double x,double y); static double div(double x,double y); void print(); }; #endif // DYNAMICMATH_H
-----------------------------------------------------
dynamicmath.cpp文件-----------------------------------------------------
#include "dynamicmath.h" DynamicMath::DynamicMath() { } DynamicMath::~DynamicMath() { } double DynamicMath::add(double x,double y) { return x + y; } double DynamicMath::sub(double x,double y) { return x - y; } double DynamicMath::mul(double x,double y) { return x * y; } double DynamicMath::div(double x,double y) { if (y > -0.000001 && y < 0.000001) { return 0; } else { return x/y; } } void DynamicMath::print() { std::cout << "Hello World" << std::endl; }
3. 编译
指令如下:
# g++ -fPIC -shared -o libdynmath.so dynamicmath.cpp
效果如图:
生成了libdynmath.so ,这就是我们要的动态链接库!
4. 使用动态链接库
测试用例:
-----------------------------------------------------
test.cpp文件-----------------------------------------------------
#include "dynamicmath.h" #include <iostream> int main() { double x = 10; double y = 2; std::cout << DynamicMath::add(x,y) << std::endl; std::cout << DynamicMath::sub(x,y) << std::endl; std::cout << DynamicMath::mul(x,y) << std::endl; std::cout << DynamicMath::div(x,y) << std::endl; DynamicMath dyn; dyn.print(); return 0; }
执行命令:
#g++ test.cpp -L../lib -ldynmath
# ./a.out
发现报错了,大意是无法打开动态库,找不到库文件。
【解决方案】把这个库文件,拷贝到/usr/lib64文件夹下
#cp libdynmath.so /usr/lib64/
此时再执行文件,发现成功了,结果如图:
#./a.out
5. 参考文献
[1]http://www.cnblogs.com/skynet/p/3372855.html
------------