当前位置: 首页 > news >正文

Windows中xxx.dll动态链接库文件转xxx.a静态库文件

        最近在学习探索C/C++程序代码中调用Python代码时,出现了一个问题:下载的程序库文件,在使用MinGW编译C/C++的代码时,一直提示无法链接,才发现是库类型不对应,无法导入链接。

        上图所示的Python对应库,下载链接如下:

1. Embedding Python in Another Application — Python 3.13.3 documentationhttps://docs.python.org/3.13/extending/embedding.html

        特此总结梳理了各种类型库文件格式如下表格,供参考学习:

特性

.dll (Windows)

.so (Linux/Unix)

.a (静态库, Unix)

.lib (Windows 静态库/导入库)

全称

Dynamic Link Library

Shared Object

Archive

Library (Static/Import)

平台

Windows

Linux/macOS/Android

跨平台(Unix-like 常见)

Windows

链接方式

动态链接(运行时)

动态链接(运行时)

静态链接(编译时)

静态链接(编译时)或导入库

文件内容

可执行代码+导出符号

可执行代码+导出符号

多个.o文件的集合

静态库:代码;导入库:DLL 的符号表

依赖关系

运行时需.dll文件

运行时需.so文件

无依赖(代码嵌入可执行文件)

静态库:无依赖;导入库:需.dll

加载方式

LoadLibrary()+GetProcAddress()

dlopen()+dlsym()

直接编译到可执行文件

直接编译到可执行文件(静态库)

更新维护

替换.dll即可更新

替换.so即可更新

需重新编译程序

静态库:需重新编译;导入库:需更新.dll

生成工具

MinGW/MSVC (gcc -shared)

GCC (-shared -fPIC)

ar+gcc

MSVC (lib.exe) / MinGW (ar)

示例命令

gcc -shared a.c -o a.dll

gcc -shared -fPIC a.c -o liba.so

ar rcs liba.a a.o

lib /OUT:a.lib a.obj

(MSVC)

常见用途

Windows 系统库、插件

Linux 系统库、动态模块

嵌入式开发、独立分发

Windows 静态库或 DLL 的导入库

        解决方法:用 gendef + dlltool 生成 MinGW 可用的 .a 文件

1、安装 MinGW 工具链

        确保已安装 MinGW 并包含 gendef 和 dlltool(通常在 mingw64/bin 下)。

MinGW编译器任意版本使用配置经验教程-CSDN博客https://blog.csdn.net/weixin_49337111/article/details/140274770?spm=1001.2014.3001.5502

2、生成 .def 文件

//  通过这条命令,会生成 python313.def,包含 DLL 的导出函数。

gendef python313.dll

3、用 dlltool 生成 .a 文件

dlltool --dllname python313.dll --def python313.def --output-lib python313.a

4、生成 libpython313.a 后,在 CMake 中链接:

target_link_libraries(convert python313.a)

        如下图所示,在操作结束后,生成了所需的库:python313.a

相关文章:

  • Python Cookbook-5.15 根据姓的首字母将人名排序和分组
  • 深入解析 Spring AI Alibaba 多模态对话模型:构建下一代智能应用的实践指南
  • QML 中的 QVariantMap
  • Python Cookbook-5.14 给字典类型增加排名功能
  • CSPM认证对项目论证的范式革新:从合规审查到价值创造的战略跃迁
  • MicroPython 开发ESP32应用教程 之 I2S、INMP441音频录制、MAX98357A音频播放、SD卡读写
  • 5Why分析法
  • 低压电工怎么备考,刷题题库分享
  • MySQL Slow Log
  • 三维凹多面体分解为凸多面体的MATLAB实现
  • 理解大模型论文中的名词部分
  • 深入剖析Go Channel:从底层原理到高阶避坑指南|Go语言进阶(5)
  • Next.js 平行路由详解
  • Linux系统中使用node -v出现GLIBC_2.27 not found问题的解决方案
  • 前端大屏可视化项目 局部全屏(指定盒子全屏)
  • 《算法笔记》3.5小节——入门模拟->进制转换
  • Halo 设置 GitHub - OAuth2 认证指南
  • 【模拟电路】达林顿管
  • Linux--进程信号
  • windows安装docker随记
  • 天猫做网站/关于seo的行业岗位有哪些
  • 建设银行网站解除绑定/长沙seo代理
  • 返利网站怎么做的/代写
  • 孟村县做网站/昆明自动seo
  • wordpress做下载型网站/做网页设计一个月能挣多少
  • 建设银行网站怎么下载/做网站的公司有哪些