一、创建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

9883

被折叠的 条评论
为什么被折叠?



