CentOS 制作C++动态链接库

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





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

相关文章

Centos下搭建性能监控Spotlight
CentOS 6.3下Strongswan搭建IPSec VPN
在CentOS6.5上安装Skype与QQ
阿里云基于centos6.5主机VPN配置
CentOS 6.3下配置multipah
CentOS安装、配置APR和tomcat-native