使用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安装不完整、环境变量配置顺序错误,或存在同名程序干扰。
解决步骤
- 检查命令映射:打开命令提示符,输入
where gcc,查看返回路径。若显示cpp.exe的路径,说明环境变量配置错误。 - 直接调用完整路径:使用gcc的完整路径执行编译,例如:
C:\MinGW\bin\gcc.exe -c clib.c - 修正环境变量:将MinGW的
bin目录(如C:\MinGW\bin)移到环境变量Path的最顶端,确保真正的gcc.exe被优先调用。 - 检查MinGW安装:确认安装时勾选了
C Compiler组件,若未安装,重新运行MinGW安装程序补充安装。
内容的提问来源于stack exchange,提问作者WolfJack24
相关产品推荐
相关产品推荐

