weixin_41730474 2021-02-01 11:48 采纳率: 0%
浏览 80

Python脚本调用自己写的c++库(c++库里面调用Python加载模块崩溃)?

1可以确定脚本版本没有问题,实验了好多版本。

2利用Python源码跟踪崩溃源是在获取Python全局变量(PyEval_GetGlobals)里面崩溃了,访问了一个框架指针为null,源码用框架指针去获取全局变量,目前不知道这个框架是指什么。

3用win32程序去调用写的c++程序完全没问题。

4有些开放Python的商业软件用Python加载这个c++库可以用,有些不可以。

5直接用Python自带的exe运行Python脚本,脚本里面加载上面说的库,是同一个地方崩溃了。

6c++库里面获取Python模块函数用的PyImport_ImportModule。

7目前怀疑所谓的框架是不是就是像c++这边这样需要一个消息转发机制,确实测试的时候崩溃的环境下线程退了,但是开一个线程一直不退还是要崩溃。

8将加载模块放到c++接口那儿直接让Python调,所有环境下都会崩溃,包括可以的商业软件调用。只有在库里面写个定时器来掉加载Python模块函数,才能在一些商业软件里面不崩溃。

总结一下就是,怀疑需要一个框架来搭载Python脚本,但是不知道这个框架是个什么,简单的建一个线程并不能达到效果。

  • 写回答

2条回答 默认 最新

  • weixin_41730474 2021-02-09 13:22
    关注

    解决办法:以后大家可以参考一下

    auto gil = PyGILState_Ensure();
    //这儿就是需要C++调用python接口的代码

     PyGILState_Release(gil);

    大概意思就是python在执行的时候需要获取执行线程权限,不然调用C++的python库接口会失败

    评论

报告相同问题?

悬赏问题

  • ¥15 关于lua调用DLL的c/c++动态库(相关搜索:数据库)
  • ¥15 prokka运行时失败
  • ¥15 求一款免费的pdf编辑js,web端用的
  • ¥30 申威平台是否兼容使用cmake,需要cmake版本在3.15版本以上
  • ¥20 UE5.2插件Remote Control Web Interface安装失败问题
  • ¥15 c#调用c++方法提示错误 无法封送处理泛型类型
  • ¥15 求分析下图晶体与三极管组成的振荡电路
  • ¥100 多线程+连接池+代理 运行一段时间线程阻塞
  • ¥15 关于#单片机#的问题:求一个使用C语言将重力加速度gx,gy,gz积分获取到速度的代码(相关搜索:c语言)
  • ¥15 matlab导致电脑重启问题