CentOS 制作C++动态链接库

来源:互联网 发布:windows server版本 编辑:程序博客网 时间:2024/06/04 23:31

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,然后执行这个文件

# ./a.out


发现报错了,大意是无法打开动态库,找不到库文件。


【解决方案】把这个库文件,拷贝到/usr/lib64文件夹下

# cp libdynmath.so /usr/lib64/


此时再执行文件,发现成功了,结果如图:

# ./a.out





5. 参考文献

[1] http://www.cnblogs.com/skynet/p/3372855.html





------------

0 0