本人是刚毕业的大学生一枚,这是写的第一篇博客,若有不对的地方,恳请指正!
由于工作原因,不得已在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的当前目录,不过此方法只对当前会话起作用,当然也有其他的方法,读者可以自行在网上搜一下。