You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

extern "C"函数中使用std::vector及Python调用C++ DLL报错解决

解决MinGW编译C++ DLL被Python ctypes调用时的依赖问题

1. 静态链接C++标准库

MinGW默认动态链接GCC的C++运行时库(如libstdc++-6.dll),若该库不在Python的搜索路径内就会触发依赖错误。编译时添加静态链接参数,将标准库打包进DLL:

g++ -shared -o add.dll add.cpp -static-libstdc++ -static-libgcc

2. 检查DLL依赖项

用工具确认DLL的依赖库是否都能被找到:

  • MinGW环境下执行:objdump -x add.dll | grep DLL
  • Windows SDK环境下执行:dumpbin /dependents add.dll
    若存在未解决的依赖,要么静态链接对应库,要么将依赖DLL放到Python脚本同目录,或添加到系统PATH中。

3. 验证导出符号正确性

确保extern "C"修饰的函数已正确导出,用nm工具检查:

nm -D add.dll | grep add

正常应显示类似T add(64位)或T _add(32位)的符号,保证Python能定位到函数。

4. 匹配Python与DLL的位数

Python的32/64位版本必须和MinGW编译的DLL位数一致:

  • 若Python是64位,直接用MinGW-W64 64位版本编译即可
  • 若Python是32位,编译时加-m32参数:
g++ -shared -m32 -o add.dll add.cpp -static-libstdc++ -static-libgcc

5. 临时添加MinGW路径到系统环境(备选)

若不想静态链接,可在Python脚本开头临时将MinGW的bin目录加入PATH:

import os
os.environ['PATH'] = r'C:\mingw64\bin;' + os.environ['PATH']
import ctypes

内容的提问来源于stack exchange,提问作者wangye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:12:08