微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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





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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。