1:用qtCreator创建一个so项目
先创建库文件,创建库文件->C++ Libiary,选动态库,选存放路径,填写程序名称,下一步,由于我这边安装了交叉编译环境
这里出现两个选项,一个创建本机pc上的so文件,一个创建目标板的so文件,我这里选本机,下一步,默认勾选了qtcore,
如果这个so文件不含界面之类的,默认选这一个够用,一直下一步创建成功。
2:默认创建出来so项目介绍
默认创建出来的项目在head目录下都有一个XXX_global.h,这个文件写了个宏定义,是不是做导出用。
#if defined(TESTLIB_LIBRARY)
# define TESTLIBSHARED_EXPORT Q_DECL_EXPORT
#else
# define TESTLIBSHARED_EXPORT Q_DECL_IMPORT
#endif
如果定义了TESTLIB_LIBRARY ,则定义TESTLIBSHARED_EXPORT为导出关键字。
在pro文件中,默认定义了TESTLIB_LIBRARY。那么肯定只要用TESTLIBSHARED_EXPORT修饰的类或函数都是做导出用。
默认给的demo导出了一个类,在导出类中新建一个函数,供外部调用。
3:如何在主程序中增加这个so
创建调用so的主程序,可以新建一个带界面的程序,放个button,鼠标点击时候调用这个so中的函数,输出一些信息,测试 是否调用成功,在主程序的pro文件中,增加如下两行,把头文件和库文件引用进来。
INCLUDEPATH += /root/Downloads/testlib
LIBS += -L/root/Downloads/testlib -ltestlib
INCLUDEPATH += 后面写so的头文件的路径,LIBS += -L后面写lib文件的路径,-l后面是库的项目名称。
注意1:不要带上so,或者其他so.1 注意2:-L后面直接写路径,不要有空格
以上两点出错都会造成程序执行时候提示连接不到库。
注意三:包含头头文件的时候把so库的XXX_global.h 头文件也包含上,否则编译不过。建议头文件从原项目拷贝出来,放到主项目目录下,然后写相对连接来引用。