ubuntu18 + QT + 静态库创建和调用+Plain C++ Aplication
一:创建静态库
1)
一直下一步到结束
2)MyLib.pro不需要动默认就好
QT -= gui
TARGET = MyLib
TEMPLATE = lib
DEFINES += MYLIB_LIBRARY
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
mylib.cpp
HEADERS += \
mylib.h \
mylib_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
3)将mylib_global.h文件内容拷贝到mylib.h, 将mylib_global.h文件删除
4)编写mylib.h,mylib.cpp
mylib.h, 只是加了: void Hello();
#ifndef MYLIB_H
#define MYLIB_H
#include <QtCore/qglobal.h>
#if defined(MYLIB_LIBRARY)
# define MYLIBSHARED_EXPORT Q_DECL_EXPORT
#else
# define MYLIBSHARED_EXPORT Q_DECL_IMPORT
#endif
class MYLIBSHARED_EXPORT MyLib
{
public:
MyLib();
void Hello();
};
#endif // MYLIB_H
mylib.cpp
#include "mylib.h"
#include <iostream>
using namespace std;
MyLib::MyLib()
{
}
void MyLib::Hello()
{
cout<<"Hello!"<<endl;
}
5)编译生成.so文件
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
二:静态库libMyLib.so的使用
1) 新建Plain C++ Aplication工程
直接到完成
2) 调用dll
在工程目录下创建lib文件夹,将已经生成的libMyLib.so libMyLib.so.1 libMyLib.so.1 .0 libMyLib.so.1 .0.0拷贝到该文件价下
将MyLib.h文件拷贝到工程DllTest文件夹下,并且包含头文件
导入dll, 工程右键添加外部库,已经复制在工程的lib文件夹了
编辑Dll.pro删除CONFIG -= qt,否则会报如下错误
error: ‘QtCore/qglobal.h’ file not found
原因:-号代表禁用, CONFIG -= qt会禁用关于QT的库
编辑main.cpp
#include <iostream>
#include "mylib.h"
using namespace std;
int main()
{
MyLib lib;
lib.Hello();
return 0;
}
到此编译一下,生成可执行文件了,但是还不可以运行
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
三:运行
1)将libMyLib.so libMyLib.so.1 libMyLib.so.1 .0 libMyLib.so.1 .0.0拷贝到可执行文件夹下
2)直接运行会报错:error while loading shared libraries: libMyLib.so.1: cannot open shared object file: No such file or directory
还需要在配置文件中配置Lib路径,打开文件.bashrc文件添加lib所在文件路径
注意:第一个lib是文件夹名,第二个是文件类型lib
$ export LD_LIBRARY_PATH=/home/whfml/AQTTest/DllTest/lib/lib:$LD_LIBRARY_PATH
运行即可,你就会发现惊喜