Linux下QT生成的(.o)、(.a)、(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)之间的区别

本文解释了Linux下Qt编译过程中.o、.a、.so及其变体的区别,特别是.so文件的软链接特性,并指导如何在Qt项目中通过调整pro文件来控制动态库版本和生成文件数量。

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

记录一下遇到的问题:

Linux系统下Qt编译第三方动态库会生成多个.so文件,不了解的小伙伴可能很疑惑:
(1)Linux 下 QT 生成的(.o)、(.a)和(.so)三个文件的区别
(.o)就相当于windows里的obj文件;
(.a)即 linux 下的静态链接库(Statically Linked library),或称静态库;
(.so)即 linux 下的共享库(Shared library),或称动态库;
【备注】在VS中静态库的后缀名为(.lib);动态库的后缀名为(.dll)。

(2)Linux 下 QT 生成的(.so)、(.so.1)、(.so.1.0)和(.so.1.0.0)四个文件的区别
QT在生成动态库时,会默认生成(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)四个文件。
其中,(.so.1.0.0)为实际的动态库文件,(.so)、(.so.1)、(.so.1.0)均为软链接,都是指向(.so.1.0.0)的链接文件,为了版本控制。

如果不需要Qt生成版本控制,只要单独的so,在pro文件中添加:

CONFIG += plugin

加上之后,使用QCreator编译完之后只会生成一个.so文件;

<think>好的,我需要回答用户关于如何在Linux环境下使用QT生成共享库(.so文件)的问题。首先,我得回忆一下QT创建共享库的基本步骤,并结合用户提供的引用内容来确保准确性。 用户提到的引用中有关于配置和构建Qt的内容,比如引用[1]提到了配置和构建Qt的步骤,引用[2]涉及Ubuntu安装Qt5的配置,引用[4]提到创建工作目录。这些可能和项目配置有关,但用户的问题具体是生成共享库,所以可能需要指导如何在Qt项目中设置项目类型为库,然后编译生成.so文件。 首先,用户需要创建一个Qt项目,并选择库的类型。在Qt Creator中,新建项目时可以选择C++库,然后选择共享库。这应该会生成相应的.pro文件,其中包含TEMPLATE = lib和CONFIG += shared的设置,确保生成的是动态链接库。 然后,编写库的代码,包括头文件和源文件,并确保正确导出符号。在Linux下,通常使用__attribute__((visibility("default")))或者在.pro文件中添加配置,如引用[3]提到的可能涉及Qt版本差异,需要注意兼容性,比如Qt4到Qt5的变化,但生成库的基本步骤应该类似。 接下来是编译过程。用户需要配置Qt项目,选择正确的工具链,比如GCC,然后进行构建。构建完成后,在输出目录中应该会生成.so文件。引用[1]中提到构建Qt本身的步骤,但这里用户需要的是构建自己的项目,因此步骤类似:配置项目,解决依赖,构建。 另外,用户可能需要安装必要的开发包,如引用[2]中提到的安装Qt5和相关依赖,确保编译环境正确。同时,引用[4]提到创建工作区目录,可能涉及项目路径管理,但生成库主要是在项目构建目录中。 测试库的时候,用户需要创建一个应用程序项目,链接到该.so文件,并包含头文件。在.pro文件中添加LIBS += -L路径 -l库名,并确保运行时库路径正确,可以用LD_LIBRARY_PATH环境变量或者将库复制到系统目录。 总结步骤应该是:创建库项目、编写代码、配置.pro文件、构建生成.so、测试使用。需要确保所有步骤中的配置正确,特别是.pro文件的设置和符号导出的处理。同时,引用中提到的配置和依赖安装可能影响项目构建,需要用户预先安装好Qt开发环境。</think>在Linux环境下使用Qt生成共享库(.so文件)的步骤如下: --- ### 步骤1:创建Qt共享库项目 1. 打开Qt Creator,选择 **文件 > 新建文件或项目**。 2. 选择 **Library > C++ Library**,然后点击 **Choose**。 3. 输入项目名称(如`MySharedLib`),选择项目路径,点击 **下一步**。 4. 选择 **共享库** 类型,勾选需要的模块(如Qt Core),点击 **下一步** 完成创建[^1]。 --- ### 步骤2:配置项目文件(.pro) 确保`.pro`文件中包含以下关键配置: ```qmake TEMPLATE = lib # 声明生成库文件 CONFIG += shared # 指定为动态链接库 DESTDIR = $$OUT_PWD/lib # 可选:设置输出目录 ``` 若需导出符号,在头文件中使用宏定义: ```cpp #ifdef MYSHAREDLIB_EXPORT #define MYSHAREDLIB_API Q_DECL_EXPORT #else #define MYSHAREDLIB_API Q_DECL_IMPORT #endif class MYSHAREDLIB_API MyClass { // 类定义... }; ``` --- ### 步骤3:构建项目 1.Qt Creator中选择 **构建 > 构建项目**。 2. 构建完成后,在`./lib/`目录(或默认的构建目录)下会生成`.so`文件,例如`libMySharedLib.so.1.0.0`。 3. 生成符号链接文件(如`libMySharedLib.so`)以便应用程序链接[^2]。 --- ### 步骤4:使用共享库 1. **链接库文件**:在应用程序的`.pro`文件中添加: ```qmake LIBS += -L$$PWD/../MySharedLib/lib -lMySharedLib INCLUDEPATH += $$PWD/../MySharedLib ``` 2. **运行时加载**:确保系统能找到库文件: ```bash export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH ``` 或复制库到系统路径: ```bash sudo cp libMySharedLib.so /usr/local/lib sudo ldconfig ``` --- ### 注意事项 - **依赖检查**:确保开发环境已安装Qt的编译工具链(如`g++`、`make`)和Qt库的开发包。 - **符号导出**:若未使用Qt宏(如`Q_DECL_EXPORT`),需通过`__attribute__((visibility("default")))`显式导出符号。 - **版本兼容性**:注意Qt版本差异(如Qt4与Qt5的模块调整),避免API不兼容问题[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值