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

 我来答
出家人词悲
高赞答主

推荐于2018-05-10 · 大脑停止不了思考
知道大有可为答主
回答量:1.4万
采纳率:12%
帮助的人:3926万
展开全部

先写好实现动态链接库的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 

输出如下:

匿名用户
推荐于2016-11-18
展开全部
举个例子,就容易理解了。
//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库,
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式