当前位置:首页 » 操作系统 » linuxqt动态库

linuxqt动态库

发布时间: 2023-10-26 00:40:02

1. 为什么动态编译Qt库需要Perl环境

您最初的想法是正确的,x86平台的库放在电脑上即可。

而通过arm-linux-交叉编译工具链编译过的库,是需要放在
开发板的文件系统里面的,通用的做法一般是放在/lib或者/usr/lib
目录里面即可。或者也可放在其他目录中,但是需要配置一下LD_LIBRARY_PATH
环境变量。例如放在/home/qtlib目录中,由于这个不是系统默认的动态库目录,

需要设置环境变量LD_LIBRARY_PATH,在/etc/profile下面添加:
export LD_LIBRARY_PATH=/home/qtlib:$LD_LIBRARY_PATH

2. 如何用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的文件,如下图:

3. 动态库 是什么

首先,想要知道动态库,我们得了解C++/C以及计算机的一些背景知识。
一般而言,在Windows下,*.dll文件就是动态库文件。用C++/C开发的程序,在发布的时候,会出现两种情况,第一,整个软件就只有一个文件,你只要双击那个exe文件,就可以运行。第二,除了exe之外,还有dll等文件。在这里,我们假设的文件只有exe文件和dll文件, 不讨论什么图标之类文件。
只有一个文件的,库已经嵌到那个exe里面。而有很多dll文件的程序,库没有嵌入到exe里面。所以,你可以看一下,如果那个exe文件大小非常大,那就说明是静态链接,在开发的时候是使用静态库。如果那个exe非常小,那么一般是使用的动态库。
那么问题来了,动态库与静态库相比优势又是什么。动态库节约内存,为什么这么说呢。假如两个类型的程序,如果他们都有一个共同使用的dll,那么在内存里面,只有一份,而不是两份。如果是使用了静态库,这会有两份,会有很大的浪费空间。
当然,使用动态库还有需要注意的地方。比如,有两个名字一模一样的动态库Qtcore4.dll,但是呢,一个dll是用vs2010编译器生成的,一个是用vs2015编译器生成的。如果,exe使用的dll弄错的话,程序结果会不对或者其他奇葩的问题。
以上均是一个大致的讲解,细节部分请参考程序员的自我修养这本书!

4. linux下 qt程序源代码如何编译运行

仔细看里面的源代码,应该有一些文件里有连接到*.lib文件的,这是QT的动态库文件把QT库编译成linux下的*.lib,然后编译的时候,把lib文件放在同一文件夹,并且编译命令加上-l *.lib或者放到根目录下的lib目录下也可以。这样试一下。.o文件还需要经过连接才能生成可执行的文件。

5. 如何用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

6. libicui18n.so makefile中怎么链接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* 结尾动态库文件,一般有多个。

热点内容
无需服务器搭建网站 发布:2025-01-22 21:53:34 浏览:114
旅游青蛙安卓版如何下载 发布:2025-01-22 21:52:51 浏览:317
欧文5的配置是什么 发布:2025-01-22 21:30:23 浏览:108
日志存储数据库 发布:2025-01-22 21:30:07 浏览:474
gulp上传cdn 发布:2025-01-22 21:27:34 浏览:203
emule文件夹 发布:2025-01-22 21:23:23 浏览:981
s7e什么时候推送安卓7 发布:2025-01-22 21:20:59 浏览:203
狐狸的清白脚本分析 发布:2025-01-22 21:19:59 浏览:182
如何破解仿射密码 发布:2025-01-22 21:13:53 浏览:81
百度视频存储 发布:2025-01-22 21:13:11 浏览:168