导航:首页 > 源码编译 > qt编译的动态链接库

qt编译的动态链接库

发布时间:2022-06-27 19:52:43

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

先写好实现动态链接库的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的文件,如下图:

2. 怎样解决Qt编译出的程序运行时缺少libgcc

缺少动态链接库,你的qt是动态编译的,根据提示上你qt的安装目录上考到你的exe文件夹

3. Qt下如何编译库

一般分为动态库和静态库,方法分别如下:
一.
静态库的生成
1.
测试目录:
lib
2.
源码文件名:
mywindow.h,
mywindow.cpp
3.
编写项目文件:
mywindow.pro
注意两点:
TEMPLATE
=
lib
CONFIG
+=
staticlib
4.
生成Makefile:
qmake
mywindow.pro
5.
编译生成静态库libmywindow.a
make
二.
静态库的使用
1.
测试目录:
test
2.
将mywindow.h与libmywindow.a拷贝至test目录下
3.
编写main.cpp,
包含头文件mywindow.h,
并调用MyWindow类
4.
编写项目文件:
test.pro
注意加上库路径与库文件名:
LIBS
+=
-L
./
-lmywindow
5.
生成Makefile:
qmake
test.pro
6.
编译:
make
7.
运行:
./test
三.
动态库的生成
动态库编译基本和静态库类似,需要将上述将要进行编译的项目文件.pro中下面这行去掉
CONFIG
+=
staticlib
按上述操作编译完后就可以得到以lib开头并且.so*
结尾动态库文件,一般有多个。

4. QT程序调用MFC的动态链接库DLL

这个很难了,因为MFC有自己的初始化,这个一般是在程序启动的时候完成的;而qt有自己的初始化,如果你强行加入MFC的初始化,应该也可以,但是麻烦而且丑陋.

建议你把Analyse模块的逻辑抽出来,生出独立的,不依赖于界面(无论是MFC还是QT)的纯C++代码,然后以QT为界面实现原来的逻辑,最后再跟GASOOH结合起来.

5. makefile中怎么链接QT的动态库详细请看下面

写法正确,只是你的LD_LIBRARY_PATH设置不对,找不到连接库的路径
export $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/local/lib
类似这样写

6. qt动态链接库建立需要包含哪些模块

先新建一个库项目

选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld

再点击下一步到

如果这里我们需要QtGui所以也勾选上了
再点击下一步直到完成
我们在.pro文件里加上
DESTDIR =..\MyDebug
它的意思是我们把生成的内容放到这个文件夹里,如果没有它会自动生成
点击项目把Shadow build 去掉勾选

设置完成后我们来实现方法测试
把sld.h修改成这样

#ifndef SLD_H
#define SLD_H

#include "sld_global.h"
#include <QString>

class SLDSHARED_EXPORT Sld
{
public :
Sld();
QString GetStr();
};

#endif

它的.cpp

#include "sld.h"
#include <QDebug>

Sld::Sld()
{
qDebug()<<"";
}

QString Sld::GetStr()
{
return "aa";
}

我们那了一个测试方法返回aa
我们再新添加一个窗体供测试用

我给命名为MyDialog
把.h文件修改成

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>
#include "sld_global.h"
namespace Ui {
class MyDialog;
}

class SLDSHARED_EXPORT MyDialog : public QDialog
{
Q_OBJECT

public:
explicit MyDialog(QWidget *parent = 0);
~MyDialog();

private:
Ui::MyDialog *ui;
};

#endif // MYDIALOG_H

,cpp

#include "mydialog.h"
#include "ui_mydialog.h"

MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
}

MyDialog::~MyDialog()
{
delete ui;
}

这里什么也没做只是把SLDSHARED_EXPORT加上了
好了就这样,我们构建一下就会在MyDebug文件夹里生成我们的dll

7. 怎样在Qt中建立使用动态链接库

工具/原料
安装有Qt集成开发环境的Windows或Linux
一、建立并生成动态链接库
1
首先在磁盘的某个位置建立一个名为DllDemo的文件夹。
打开QtCreator,新建工程,选择Library,C++库,然后就是choose。
2
然后在弹出的C++库对话框默认类型共享库,名称为MyDll。路径就是刚才建立的DllDemo文件夹。然后,一直下一步,直到点击完成。
3
来看看程序结构,以及pro文件内容。
可以看到系统自动生成了一个mydll_global.h的文件。
pro内也自动生成了一些内容。可以看到TEMPLATE = lib,而不是平时的TEMPLATE = app。
4
再来看看mydll_global.h的内容。
可以看到系统自动定义了两个宏。用于声明哪些函数是需要导出的。
5
下面来给代码添加点内容,以便于待会使用。
首先我们在mydll.h中添加几行代码,
注意:extern "C" MYDLLSHARED_EXPORT必须要有。
6
再来看看mydll.cpp中的实现代码,都比较简单。
7
代码编写完毕后,直接构建就行了。然后就可以看到生成的dll了。
二、测试生成的DLL
1
新建一个基于Qt的控制台应用程序,名称为DllTest。依然放置在DllDemo的目录下。
2
建好了以后,就可以在main.cpp写代码了。通过QLibrary类来加载dll。
因为要获得类对象的实例,所以需要将mydll.h包含进来。
要注意的是,我没有对函数是否成功获取做检测。
来看看代码:
3
代码写完后就可以构建程序了。不过要运行程序,还需要将刚才生成的dll拷贝到程序的同级目录。
4
在IDE中运行程序,因为生成的是debug版的程序,相关的环境变量未设置,无法独立运行。
可以看到dll工作的很好,程序运行正常。
三、善用Assistant
1
最后来看看Assistant中关于QLibrary的描述。比较费解的是,Assistant中并没有对创建共享库做详细的说明,估计是这个太简单或资料太多了吧。

8. 如何用Qt调用matlab生成的动态库

动态库的生成
1>首先生成目标文件,但是此时要加编译器选项-fpic和链接器选项-shared,

gcc -fpic -c add.c

gcc -fpic -c sub.c

生成中间文件add.o和sub.o

2>其次生成动态库

gcc -shared –o libtiger.so add.o sub.o

生成动态库libtiger.so,libtiger.so就是我们生成的目标动态库。我们以后使用动态库和main.c程序生成可执行程序

说明:

以上两部也可以合成一步搞定:

gcc -fpic -shared add.c sub.c -o libtiger.so

2.使用动态链接库

在编译程序时,使用动态链接库和静态库是一致的,使用”-l库名”的方式,在生成可执行文件的时候会链接库文件。

1>使用命令

gcc -o main main.c -L ./ -ltiger

2>-L指定动态链接库的路劲,-ldtiger链接库函数tiger。-ltiger是动态库的调用规则。Linux系统下的动态库命名方式是lib*.so,而在链接时表示位-l*,*是自己命名的库名。

3>但是程序会提示如下错误

error while loading shared libraries: libtiger.so: cannot open shared object file: No such file or direct

这是因为程序运行时没有找到动态链接库造成的。程序编译时链接动态库和运行时使用动态链接库的概念是不同的,在运行时,程序链接的动态链接库需要在系统目录下才行。

4>使用以下方法可以解决此问题

a. 在linux下最方便的解决方案是拷贝libtiger.so到绝对目录 /lib 下(但是,要是超级用户才可以,因此要使用sudo哦,亲)。就可以生成可执行程序了

b.第二种方法是:将动态链接库的目录放到程序搜索路径中,可以将库的路径加到环境变量LD_LIBRARY_PATH中实现:

export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

9. Qt 在调用动态链接库时涉及到类型转换应该怎么做

  1. 把QString转成QByteArray,然后再将QByteArray转换为char *(假如变量名为A)。

  2. 创建QByteArray用于接收输出结果,先扩充足够的空间,然后转换成char * (假如变量名为B)。

  3. 调用Encode(A,B,A.getLength())进行转换

  4. 把结果B转换成QString。

10. 请哪位来解释一下Qt静态编译和动态编译的区别

静态编译与动态编译的区别:
1、动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。
所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。
缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。

阅读全文

与qt编译的动态链接库相关的资料

热点内容
位域结构体编译树形描述 浏览:652
宏基手机如何装安卓系统 浏览:743
linuxcp命令实现 浏览:668
单片机热释红外报警器 浏览:661
单片机原理及接口技术b卷 浏览:356
php链接正则表达式 浏览:966
安卓版苹果手机怎么转手 浏览:103
安卓怎么修改app的名字 浏览:139
域名服务器可将域名地址 浏览:724
广州服务器机柜怎么卖 浏览:238
转让腾讯云三年服务器 浏览:254
网易云音乐加密怎么处理 浏览:389
编译小视频软件 浏览:597
盒马app买东西怎么送 浏览:121
编译原理国产 浏览:694
在线用pdf转word 浏览:426
咪咕app怎么发表文章 浏览:209
phpsftp上传 浏览:936
php可以干嘛 浏览:879
梁箍筋加密区需要满绑扎吗 浏览:331