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

使用ctypes加载DLL调用display函数报错:找不到指定函数

问题解决:ctypes调用g++编译的DLL找不到函数 + gcc编译参数错误

一、解决ctypes找不到display函数的问题

问题原因

g作为C编译器,默认会对C函数名执行名字修饰(Name Mangling),把原本的display改写成类似_Z7displayv的符号名,导致ctypes用原函数名无法匹配到DLL中的符号。

解决步骤

修改头文件clib.h,用extern "C"包裹函数声明,强制g++按照C语言规则处理这些函数,避免名字修饰:

#ifdef __cplusplus
extern "C" {
#endif

#define Export __declspec(dllexport)

Export void display(void);

#ifdef __cplusplus
}
#endif

重新编译DLL(Windows下-fPIC是Linux平台的参数,可省略):

g++ -c clib.c -o clib.o
g++ -shared clib.o -o clib.dll

此时运行main.py即可正常调用display函数。

二、解决gcc编译时cpp: Too many arguments错误

问题原因

系统环境变量中,gcc命令被错误映射到了C预处理器cpp,而非真正的GCC编译器。可能是MinGW安装不完整、环境变量配置顺序错误,或存在同名程序干扰。

解决步骤

  1. 检查命令映射:打开命令提示符,输入where gcc,查看返回路径。若显示cpp.exe的路径,说明环境变量配置错误。
  2. 直接调用完整路径:使用gcc的完整路径执行编译,例如:
    C:\MinGW\bin\gcc.exe -c clib.c
    
  3. 修正环境变量:将MinGW的bin目录(如C:\MinGW\bin)移到环境变量Path的最顶端,确保真正的gcc.exe被优先调用。
  4. 检查MinGW安装:确认安装时勾选了C Compiler组件,若未安装,重新运行MinGW安装程序补充安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:25:09