linux下qt创建so文件,并调用

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 头文件也包含上,否则编译不过。建议头文件从原项目拷贝出来,放到主项目目录下,然后写相对连接来引用。

你可能感兴趣的:(QT)