Linux下C++动态库

本人是刚毕业的大学生一枚,这是写的第一篇博客,若有不对的地方,恳请指正!

由于工作原因,不得已在Linux下开发项目,而且还是用C++,对于C++,本人是有一些白痴的。项目完成,在此做一下总结,给自己一个交代。

首先先对动态库方面的只是做一个总结

      1、动态库的简单介绍

                 首先,动态库就是动态链接库,本人有些懒,一下都成为动态库。在Linux下,动态库都以so结尾,即shared object。它是在程序执行的时候装入的,效率高,灵活性很好。我们可以根据自己的需求,制作符合自己需求的动态库,方便自己的使用。

      2、动态库的制作

                 例子的简单介绍(这个例子本人亲测,完全没问题):

                 材料:test.h文件,test1.cpp文件,test2.cpp文件(.h文件是类和函数的声明,.cpp文件是类和函数的实现)

                 目标文件:libtest.so(此文件有自己的命名规则,必须以lib开头,后缀名是.so)

代码:

test.h:

     #ifndef TEST_H
    #define TEST_H
    #include <string.h>
    #include <stdlib.h>
    #include<stdio.h>
    #include<iostream>
    using namespace std;

    class Student
    {
    private:
        string name;
    public:
        Student();
        void setName(string s_name);
        string getName();
        void speak();
    };
    void say();
    #endif

test1.cpp:

#include "test.h"
#include <string>
using namespace std;
Student::Student()
{
}
void Student::setName(string s_name)
{
        name = s_name;
}
string Student::getName()
{
        return name;
}
void Student::speak()
{
        cout<<"Hello World!!! I am c++"<<endl;
}

test2.cpp:

#include "test.h"
#include <string>
using namespace std;
void say()
{
        cout<<"Hello c++,I am XiaoMing"<<endl;
}

接下来将文件编译成.so文件,在这里本人使用makefile文件的方式进行编译:

makefileso文件:

LIB=./libtest.so
SH=./test.h
source=./test1.cpp ./test2.cpp

$(LIB):$(temp)
    g++ $(source)  -fpic -shared -o $(LIB)这一行的开头有一个Tab键,这是makefile文件的规范。

执行makefile文件:make -f makefileso,生成libtest.so文件,这时候.cpp文件就没有用了,态库制作完成。

            3、demo测试

编写测试文件demo.cpp,

demo.cpp:

#include "test.h"
    #include<string>
    #include<stdlib.h>
    #include<stdio.h>

    using namespace std;
    int main()
    {
          Student s;
          s.setName("Liming");
          s.speak();

          say();
          return 0;
    }

编写makefile文件,

makefileTest:

userfile=./demo.cpp
endfile=./test

$(endfile):$(userfile)
    g++ $(userfile) -L. -ltest -o $(endfile)

执行makefile文件:
    make -f makefileTest
    生成test可执行程序,执行可执行程序,./test,输出结果。


注:

       读者在执行make -f makefileTest时,可能会出现.so--cannot open shared object file: No such file or directory错误,这个错误是由于系统找不到libtest.so动态库造成的,读者可以输入如下命令,export LD_LIBRARY_PATH=libtest.so的当前目录,不过此方法只对当前会话起作用,当然也有其他的方法,读者可以自行在网上搜一下。


猜你喜欢

转载自blog.csdn.net/yu532164710/article/details/54729741