问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何用qt在linux中编写并使用动态链接库

发布网友 发布时间:2022-04-20 19:04

我来回答

2个回答

热心网友 时间:2023-09-13 02:13

先写好实现动态链接库的libmy.cpp文件和libmy.h文件,如下:

// libmy.cpp

#include"libmy.h" 

#include<iostream>

using namespace std;
MyLib::MyLib() 

}

MyLib::~MyLib() 

}  

void MyLib::hello() 
{     
 cout << "hello world~!" << endl;
}

// libmy.h文件

#ifndef  LIBMY_H 
#define  LIBMY_H  
class MyLib


public:     
 MyLib();     
 ~MyLib();       
 void hello(); 
}; 
#endif  /*LIBMY_H*/

 

然后写好pro文件,如下:

TEMPLATE = lib 
TARGET =DllTest

HEADERS += libmy.h 
SOURCES += libmy.cpp

保存关闭,文件名命名为MyDll.pro
在Shell里执行qmake MyDll.pro,在没有错误的情况下,然后执行make ,可以看到生成了几个后缀名为so的文件,如下图:

证明生成动态链接库成功。然后编写测试动态链接库的主函数,如下:

#include"libmy.h" 
#include<iostream>
using namespace std;
int main(int argc,char *argv[]) 
{     
       MyLib *lib = new MyLib();       // 调用刚才编写的动态链接库
       lib->hello();         
        cout << "danshiming " << endl;
        int i;
        cin >> i;
       return 1; 
}

编写main.pro文件,如下:

LIBS += -L ./                               # 设置程序查找动态库的目录为当前目录

 

# 注意:用QT生成的动态库默认都加了lib前缀和扩展名及版本名,但调用时不用加lib,不用加文件
# 扩展名so、不用加版本名1.0.0.即下面LIBS中的DllTest就是实际的动态库libDllTest.so.1.0.0

LIBS+=-lDllTest  #注意:调用时不用加lib,不用加文件扩展名so、不用加版本名1.0.0,记得前面加l(字母)

TARGET = libMyTest        

SOURCES += main.cpp

执行qmake main.pro生成makefile文件,然后执行make,可以看到生成了libMyTest可执行文件。

将动态链接库libDllTest.so.1.0.0和可执行文件传到arm板上,如下:

 在arm板上执行libMyTest,如下:

# chmod +x  libMyTest    // 先赋予可执行权限

执行:

#  ./libMyTest 

输出如下:

热心网友 时间:2023-09-13 02:14

举个例子,就容易理解了。
//libmy.h

#ifndef LIBMY_H
#define LIBMY_H

#include <QObject>

class MyLib : public QObject
{
public:
MyLib();
~MyLib();

void hello();
};
#endif /*LIBMY_H*/

//libmy.cpp

#include "libmy.h"
#include <QtDebug>

MyLib::MyLib()
{
}

MyLib::~MyLib()
{
}

void MyLib::hello()
{
qDebug() << "hello world~!";
}

//libmy.pro

######################################################################
# Automatically generated by qmake (2.01a) ?? 11? 7 17:17:14 2012
######################################################################

TEMPLATE = lib
TARGET = my
DEPENDPATH += . src
INCLUDEPATH += . src

# Input
HEADERS += src/libmy.h
SOURCES += src/libmy.cpp

//libmy.pc

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/

Name: libmy
Description: libmy test
Version: 0.1
Requires:
Libs: -L${libdir} -lmy
Cflags: -I${includedir}

以上是编写库的demo

//main.cpp

#include "libmy.h"
#include <QApplication>

int main(int argc,char *argv[])
{
QApplication app(argc,argv);

MyLib *lib = new MyLib();
lib->hello();

app.exec();
return 0;
}

在main.cpp的pro文件中,添加

CONFIG += link_pkgconfig
PKGCONFIG += libmy

连接到刚才编译的libmy库,
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
uv彩印机操作教程规范 新手买UV打印机怎样打印 掌盟里我们家的奥斯卡那个妖姬给你鸡腿别打我行吗的背景音乐的英文歌叫... 租车跑滴滴押金好退吗 为什么鸟在天上飞雷劈不到 什么通用机打发票 通用机打发票是什么发票 通用机打发票属于什么 四川监理公司有哪些 天地云庭交通状况 成都华夏建设(集团)有限责任公司攀枝花分公司怎么样? Linux系统中怎么用Qt开发图形应用界面? Linux下怎么用QT怎么画一个CPU/内存使用率的图 Linux 中qt怎么启动 windows下qt creator编写的程序如何在linux下执行?? 在Windows下开发的QT应用程序能在Linux系统应用么 linux下如何运行qt程序 QT快捷截图怎么操作 linux下QT的使用方法 怎么在 Linux 系统上截图 一段QT小程序,我需要其在LINUX下的运行结截图 如何在linux系统下使用qt 章鱼、鱿鱼、墨鱼怎么区分? 章鱼鱿鱼乌贼的区别 章鱼,乌贼,鱿鱼的区别都在你们知道吗? 章鱼,乌贼,鱿鱼三者有什么区别? 章鱼,乌贼,鱿鱼有什么区别 乌贼章鱼和鱿鱼的区别 鱿鱼,墨鱼,章鱼,乌贼到底有什么区别啊?样貌一... 章鱼、乌贼、鱿鱼如何区分?有什么区别? 乌鱼、乌贼、章鱼、鱿鱼在动物学上的区别 如何从Linux命令行截屏 linux下如何进行Qt编程? linux下QT中如何使用QProcess运行linux命令。 linux下执行qt程序怎么编译运行 linux qt 程序 放到qt上怎么运行 到底要怎么在linux下的qt里使用sqlite Java工程师都需要有会什么 为什么我的手机上网很慢 为什么手机上网很慢 为什么手机网速越来越慢 为什么我的手机突然上网很慢? 为什么手机连无线网网速很慢 为什么手机网速很慢,别人的正常 我的手机为什么网速那么慢? 新买的手机网速慢什么原因 手机网速越来越慢是怎么回事?别的手机好好的,就... 手机网速为什么那么慢 为什么高铁列车的窗户不能打开? 高铁的窗是不是像飞机那样是密封的不能像普通火车... 为什么火车到站时,乘务员都要把窗帘拉上?这其中...
  • 焦点

最新推荐

猜你喜欢

热门推荐