Linux下用QT创建动态库文件 .os,并调用

参考链接:https://blog.csdn.net/csdn83419527/article/details/78840798

     https://blog.csdn.net/qq_40263915/article/details/104884917

======创建动态库.os文件======

1.新建工程

  点击Qt Creator菜单栏“文件”-->“新建文件或项目”,选择Library,C++库,点“choose”。

  

 

   

 

   一路Next下去即可,在Kits步骤也是,按照系统默认设置即可,除非自己需要改变编译等配置;直接 点“下一步”即可。

  

 

   最后完成创建,如果需要进行版本控制可以进行设置,否则点“完成”即可。

  

 

 2.代码实现

  

  创建后,Qt Creator自动生成三个文件分别是XXX_global.h、XXX.h、XXX.cpp。其中XXX_global.h是一个宏定义文件,如下图所示。

  

 

   注意:图中标蓝的部分,可以拷贝至XXX.h中,同时将XXX_global.h删除掉,这样项目也可以直接编译使用,不删除也没有问题,只是使用时,使用程序需要同时将XXX_global.h、XXX.h包含,否则会报找不到XXX_global.h错误。这里建议把蓝标部分复制到XXX.h文件中,这样后续调用只需要包含一个即可,标蓝部分拷贝到XXX.h中的位置如下图所示。

  

 

 

   下面编写一个测试函数,先在头文件声明

  

 

   接着在 .cpp 编写实现代码逻辑,这里实现把两个参数相加并返回。

  

 

 3.编译生成 .os 库文件

  

 

  编译后会弹出一个界面,不用管它,直接关闭即可

  

   编译完成会在Release文件夹里生成的4个库文件,如下图。

  

 

   到这里就已经完成 .os 库文件的创建了,为了方便后续给别调用,我们可以新建一个文件夹,把上面生成的4个库文件和XXX.h文件保存在里面,后续只需要把这个文件夹给别的项目就可以调用了

  

 

======实现调用动态库.os文件======

1.新建立工程

  建立工程这里不细说了,具体可以参考:https://www.cnblogs.com/xingboy/p/14376226.html

  项目建成如下:

  

2.调用os库

  把上面新建保存有需要用的os库文件跟.h文件的文件夹复制到,新建项目的文件夹里,然后在313kDemo处右键点击,弹出,选择Add Library。

  

 

   然后选择外部库.

  

 

   

 

   

 

   完成后.por文件会出现如下内容

  

 

   $$PWD用于指定包含.pro文件目录的完整路径;INCLUDEPATH 指定编译项目时被搜索到的 #include 目录;LIBS指定了链接到项目中库的列表,添加的是共享库文件,-L添加目录,-l指定共享库名称(注意是共享库项目名而非共享库文件名);DEPENDPATH是程序编译时依赖的相关路径。然后我们就可以添加头文件,类似于内部定义的函数一样实现调用了。

  先在项目里添加os库文件的.h文件,把保存有os文件与.h文件的文件夹里的.h文件添加进去

  

  然后在mainwindow.h文件里包含os库的.h文件,其实不一定在mainwindow.h文件里包含,在其他文件包含也行,这里为了方便就直接在这里包含了;然后对OS库的头文件里声明的类名进行重命名。

 3.代码测试

  在UI界面添加3个文本框跟一个按钮,编辑代码实现,获取两个文本款数值,调用os库里的函数,实现该函数功能,并把结果输出在另一个文本框。

 

   选中按钮,右击转到槽,添加实现代码。

void MainWindow::on_pushButton_clicked()
{
    int a=ui->textA->text().toInt();  //获取文本框的值
    int b=ui->textB->text().toInt();
    int data=mySdk.MyTest(a,b);
    ui->textC->setText(QString::number(data)); //把数值转为字符串输出到文本框
}

4.运行查看结果

  

 5. 注意事项

  如果你把程序与so动态链接库文件,复制出来使用,需要修改 ld.so.conf 文件,指定的动态库搜索路径,执行 sudo vim /etc/ld.so.conf 在该文件里添加你保存动态链接库的路径,直接添加即可;然后执行 sudo ldconfig 使能该文件,如果报错 is not a symbolic link 可参考我另一个博客 https://www.cnblogs.com/xingboy/p/15434271.html  解决;下面附上一段以前写的关于 Linux 怎么配置使用 QT 程序与 so 文件的环境说明:

# You use the application of aa158 that need deploy some environment when first time .
 
       Firest : If you computer without the Qt5 environment well then you need deploy the environment ,

                  that you  need key in " sudo apt-get update " on the console , 

                  next key in " sudo apt-get install qt5-default " to deploy the environment ,
                  
                  last key in " sudo apt install libqt5serialport5* -y " on the console .

  Sencond : You need key in " sudo vim /etc/ld.so.conf " on the console , 

                  then tack on path of applicantion in the " /etc/ld.so.conf " .

              Exemplify tack on " /home/aplex/Desktop/AplexAA158 " in the " /etc/ld.so.conf " .
 
       Third : You need key in " sudo ldconfig " on the console that enable it .
       
      Finally: when into the folder of application after you need key in " sudo ./AA158 " to perform the application  .

 

 

  

posted @ 2021-02-05 16:20  白菜没我白  阅读(2548)  评论(0编辑  收藏  举报