linux qt 添加动态链接库_QT生成动态链接库及调用详细步骤

本文详述了在Linux环境下使用Qt创建动态链接库的步骤,包括选择库模板、设置Modules、配置输出目录等。同时,介绍了两种调用动态链接库的方法,涉及.pro文件的修改和库文件的放置。文章提供了具体的代码示例,帮助读者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 首先新建一个工程(该篇文章共有两个不同的工程,注意区分,一个是有UI界面的,一个是没有UI界面的)

2.接下来选择库模板

3.选择共享库,取个该动态链接库的名字,下一步

4.继续下一步,到Modules界面,默认选择QtCore(QtCore模块提供核心的非图形用户接口功能,所有其他Qt模块都依赖于这个模块,如果您使用qmake来构建您的项目,则默认将QtCore包含在内,详情请访问 https://blog.csdn.net/u012309854/article/details/77680116)。

相信,大部分人封装动态链接库的时候是不需要将界面封装的,只需要封装核心代码,故我们在此不选择QtGui。但如果需要将图形界面一起封装,就需要选择该项,如下结果。

5.继续下一步,直到点击完成。

6.点击项目,勾掉Shadow build,使.dll不生成在debug目录中,生成在我们自己创建的目录下面,方便查找和使用。

7.在.pro文件中,添加如下代码

DESTDIR =..\MyDebug

使生成的.dll文件放在该目录下,自动创建该目录。

8.点击运行,即可生成。(此弹框不用管它,代表编译成功,已生成文件)

9.调用方法有两种:

(1)在.pro文件中,添加如下代码,并将Save_Data.h 添加到工程项目中(这步应该都会,添加现有文件),需要用到该动态链接库的地方就 #include 进去。需要注意的一点就是:需要把以上生成的文件放置到生成的E:\cpptest\build-test_dll-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug 目录下。

LIBS += libgdi32#这个也不能少。少了会出错

win32:LIBS += "E:/cpptest/MyDebug/Save_Data.dll"

win32:LIBS+= -LE:/cpptest/MyDebug/ -lSave_Data

(2)在.pro文件中,添加如下代码,并将Save_Data.h 文件放置在与工程文件同目录文件中,需要用到该动态链接库的地方就 #include 进去。比如我的,看图一目了然:

DESTDIR =..\MyDebug

INCLUDEPATH +=../camara

LIBS += -L$$DESTDIR -lcamara

另外,再粘贴一个测试成功的链接,按照该方法也是能成功的,就是稍微复杂一点

---------------------

原文:https://blog.csdn.net/u011236602/article/details/80835575

<think>嗯,用户想在Linux环境下使用QT框架调用动态链接库,也就是.so文件。我需要根据之前提供的引用内容来整理一个清晰的步骤。首先,用户可能需要知道如何创建动态库,然后是如何调用,还有可能遇到的常见问题,比如找不到库或者GL库的问题。首先,动态库的创建部分,引用1提到在QT中新建项目,选择C++库,类型选动态库。那应该包括创建项目,编写代码,编译生成.so文件。这部分需要详细说明步骤,比如项目设置和编译后的输出位置。接下来是调用动态库的方法。引用1和引用4提到了两种方式:隐式调用和显式动态加载。隐式调用需要.pro文件里添加LIBS +=-L路径-l库名,还要包含头文件。而显式调用使用QLibrary类,动态加载符号,这样更灵活,但可能需要处理函数指针。然后要考虑常见问题,比如运行时找不到.so文件。这时候需要设置LD_LIBRARY_PATH,或者把库放到系统目录如/usr/lib。另外,引用3提到的找不到-lGL的问题,用户可能遇到,需要检查OpenGL库的路径,创建软链接或者复制到正确位置。 用户可能还关心代码示例,比如如何在.pro文件里配置,或者QLibrary的使用方法。需要提供具体的代码片段,比如头文件包含、库路径设置,以及加载函数并调用的过程。 还要注意区分调试和发布模式下的路径问题,引用2中的例子显示.so文件在build目录下的特定配置路径,可能需要用户根据实际情况调整路径。 最后,生成相关问题,帮助用户深入理解,比如优化动态库调用、处理不同架构的兼容性,或者如何调试符号未找到的问题。这些可以引导用户进一步探索。</think>### 如何在 Linux QT 中加载和调用动态链接库 .so 文件 #### 一、动态链接库的创建 1. **创建动态库项目** 在 QT Creator 中选择 `文件-新建项目` → `Library` → `C++ 库` → **类型选择“动态库”**。编写接口函数后编译生成 `.so` 文件(如 `libmylib.so`),默认生成路径为项目构建目录的 `Release` 或 `Debug` 子目录[^1][^4]。 2. **关键文件准备** - **头文件**(`.h`):声明对外暴露的函数(需用 `extern "C"` 修饰避免 C++ 名称修饰问题) - **动态库文件**(`.so`):编译后生成的核心二进制文件 #### 二、动态库的调用方法 ##### 方法1:隐式链接(常用) 1. **配置 `.pro` 文件** 在调用方的 `.pro` 文件中添加以下内容: ```makefile LIBS += -L$$PWD/../mylib/build/ -lmylib # -L 指定库路径,-l 指定库名(去除前缀 lib 和后缀 .so) INCLUDEPATH += $$PWD/../mylib/include # 头文件目录 ``` 2. **代码调用** ```cpp #include "mylib.h" // 包含头文件 int main() { myFunction(); // 直接调用动态库函数 return 0; } ``` ##### 方法2:显式动态加载(运行时加载) 使用 `QLibrary` 类动态加载符号: ```cpp #include <QLibrary> typedef int (*MyFuncType)(int); // 定义函数指针类型 void loadLib() { QLibrary lib("libmylib.so"); if (lib.load()) { MyFuncType myFunc = (MyFuncType)lib.resolve("myFunction"); if (myFunc) { int result = myFunc(42); // 调用函数 } } } ``` #### 三、常见问题解决 1. **运行时找不到 `.so` 文件** - **临时方案**:终端执行 `export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH` - **永久方案**:将 `.so` 文件复制到系统库目录(如 `/usr/lib`)或创建符号链接[^1][^3] 2. **报错 `cannot find -lGL`** OpenGL 库路径问题,需创建软链接(以 Ubuntu 为例): ```bash sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so ``` #### 四、完整调用流程示例 ```cpp // 隐式调用示例 #include "mylib.h" #include <QDebug> int main() { qDebug() << "调用动态库函数结果:" << calculateSquare(5); // calculateSquare 定义于 mylib.h return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值