GNURadio解决 “failed to initialize gtk. DLL load failed” 错误导致的软件闪退问题

文章目录

  • 软件闪退问题
  • 原理,解决过程
    • 1. GNURadio Companion是如何启动的
    • 2. 用命令行启动方式来定位错误
    • 3. 转换思路,解决方法

软件闪退问题

最近这段时间,在不同电脑的Windows运行GNURadio软件,都出现了刚打开软件就闪退的问题,而在旧电脑WIN7断网的时候又能正常打开,困惑

把正常运行的GNU整个文件夹拷贝过来,还是闪退,更困惑了,几乎没动过GNU的这些文件,怎么就突然打不开了?

卸载,再重装GNU,也不行。


原理,解决过程

1. GNURadio Companion是如何启动的

一般我们从 GNURadio Companion 图标进入GNU软件,而右键看它的属性,路径只是个命令行:(用 run_gr.bat 去运行 gnuradio-companion.py)

1
D:\GNURadio\bin\run_gr.bat gnuradio-companion.py

其实图标 GNURadio Command Prompt (开始菜单里有)就是 run_gr.bat:
run_gr.bat
就是设置GNU的运行环境,设置 PYTHONHOME、PYTHONPATH、PATH、GRC_BLOCKS_PATH、UHD 设备环境、最后用 python.exe 运行 gnuradio-companion.py 文件。

2. 用命令行启动方式来定位错误

于是打开 GNURadio Command Prompt 弹出的cmd窗口,输入命令 run_gr.bat gnuradio-companion.py,报错:
在这里插入图片描述
初始化GTK失败?什么SSH(关我P事)?
DLL加载失败,找不到指定程序。
不懂,是GTK模块那的问题?

于是,命令行运行python,单独 import gtk,或者在pycharm里单独开个程序来import,都报错:
控制台报错信息
看见具体的文件的哪一行报错了,找到这文件第40行:

1
D:\GNURadio\gr-python27\lib\site-packages\gtk-2.0\gtk\__init__.py

打开定位到40行:

1
from gtk import _gtk

__init__.py
没看见DLL啊?

_gtk是啥?在 D:\GNURadio\gr-python27\lib\site-packages\gtk-2.0\gtk 里边有个 _gtk.pyd 文件,难道坏了?上网搜了 _gtk.pyd 的32位和64位的文件下载来替换,没能解决。

有关gtk的DLL文件,就一个 gtk-win32-2.0.dll ,也上网搜了下载来替换,依旧没能解决。

3. 转换思路,解决方法

既然是 import gtk 过程出错,去谷歌搜 from gtk import _gtk DLL load failed,在 Stack Overflow 找到了这个:Error Importing GTK

其中有回答叫安装 PyGTK 的,下载下来发现需要系统直接安装py2的环境才能安装,而GNU用的自带py2,该答案没起作用。

看最后一个答案:
答案
说的是:把系统的 System32 目录下的 zlib1.dll 文件删掉
搜了一下:
搜索结果
系统里这文件还挺多的,GNU的bin文件夹下都有它。

最后,把System32 目录下的这个文件备份,删掉,终于能运行GNU了!

完毕。