一、创建so库
1.文件-->新建文件或项目-->Library->C++ Library,如下图
2.工程命名为Example
3.一直下一步就可以
4、工程创建完成,如下图
5、删除Example_global.h
6、配置.pro文件
# 设置输出目录
DESTDIR = $$PWD/output
#只生成.so文件
CONFIG += plugin
7、在Example.h头文件中添加int Add(int a,int b)函数
8、在example.cpp中实现int Add(int a,int b)
9、构建,在Example工程目录下回多出1个output目录,生成的.so文件就存在在output目录下。
二、调用
1、文件--》新建文件或项目---》Application-->Qt Widegets Application
2、工程名称为TestSo,一直点击下一步就完成。
3、在TestSo目录下新建1个include和lib目录,用来存放所要调用so库的头文件和.so文件,如下图
4、修改.pro文件
# 设置头文件路径
INCLUDEPATH += $$PWD/include
# 设置库路径和库名称
LIBS += -L$$PWD/lib/ -lExample
# 设置输出目录
DESTDIR = $$PWD/output
# 在构建完成后将 lib 目录下的文件拷贝到 output 目录
QMAKE_POST_LINK += $$quote(cp -r $$PWD/lib/* $$PWD/output/)
5、引入头文件,调用Add方法,并点击构建,如下图
6、在TestSo目录下就可以生成1个output,里面存放可执行程序TestSo和libExample.so
7、单独运行TestSo,在终端上输入./TestSo,出现找不到链接库
8、在终端输入ldd TestSo,发现libExample.so not found,
ldd TestSo
解决方法:
方法一:
1、在终端上设置链接库的路径
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
2.ldd在查看一下,libExample.so 已经链接成功
3、执行./TestSo
./TestSo
方法二:
1、创建1个脚本文件,命名为run.sh
vi run.sh
2、在run.sh文件中添加一下内容
#!/bin/bash
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
./TestSo
3、修改run.sh权限
chmod 775 run.sh
4、在终端上执行./run.sh
./run.sh