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

使用ctypes在Python与C++间通过.so文件交互时的参数传递及返回值异常问题排查

Python调用MinGW编译的C++共享库时的数值传递问题

我肯定是犯了某个低级错误,但翻来覆去就是找不到……索性把问题简化成下面的示例,这下问题就明明白白了——我完全没法在Python和C++之间顺畅地传递数据、获取返回值。

测试用C++代码

extern "C" double reflect(double inp){ return inp; }

编译命令

g++ -c -Wall -Werror -fPIC test.cpp -o testO.o
g++ -shared -o testSO.so testO.o

Python调用代码

和我实际项目里的用法一致:

import ctypes
hdl = ctypes.cdll.LoadLibrary(r"C:\Windows\path\to\testSO.so")

测试结果

  • hdl.reflect(1) >>> 1(没做ctypes类型转换,但结果还正常)
  • hdl.reflect(1.1) >>> 执行失败(这个结果倒是符合预期)
  • hdl.reflect(ctypes.c_int(1)) >>> 1(c_int隐式转成c_double好像可行)
  • hdl.reflect(ctypes.c_float(1.1)) >>> 1006192077(结果完全不对)
  • hdl.reflect(ctypes.c_double(1.2)) >>> 858993459(结果也异常)

我的运行环境是Windows 10,编译器用的MinGW-W64 8.1.0,Python是3.8版本(Anaconda发行版)。之前也运行过DLL,自己也编译过C语言的Python模块,但这次就是找不到问题出在哪!?

编辑补充:已经修正了Topological Sort指出的拼写错误(代码里的.so文件路径是正确的,刚才这里漏了末尾的引号)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:12:43