重点是介绍了一种排查这个问题的方法。

背景

  1. Windows 下, Caffe 单独编译成库并且安装在路径 Caffe_DIR, 动态链接库 Caffe_DIR/bin 已经加入环境变量了
  2. Run_DIR/main.exe 是一个链接了 Caffe lib 的程序,在运行的时候报错 “ 应用程序无法正常启动(0xc000007b),请单击“确定”关闭应用程序 ”

Debug

  1. 把 main.exe 复制到 Caffe_DIR/bin 中(和一堆dll放一起),双击运行,嗯?可以跑;这说明问题出在没有找到必要的.dll,但是我明明把Caffe_DIR 加入环境变量并且重启过啊,不明所以,继续试验
  2. 把 Caffe_DIR/bin 里面所有.dll 复制到原先的main.exe 所在目录Run_DIR,双击 main.exe,可以跑,确定问题就出在这堆 .dll中

  3. (前提是 Caffe_DIR/bin 已经在环境变量中)逐个删除Run_DIR里的.dll文件,每删除一个就 运行一下 main.exe,直到在删除 libgcc_s_seh-1.dll 之前都可以运行(这也证明了我们之前加入环境变量中确实生效了)。所以问题就出在 libgcc_s_seh-1.dll 链接库上,这个是caffe的依赖 openblas 带来的。虽然它的路径已经被添加到环境变量中,但是不知道为什么没有生效。

解决办法

libgcc_s_seh-1.dll 这个dll 文件放在 main.exe 的路径下就可以了,它将被优先找到。

原因(猜想)

因为时间原因没有深入挖掘,但是我认为最有可能的原因是,在我的电脑里有多个 libgcc_s_seh-1.dll 文件,在main.exe 装载的时候先找到了另外一个版本的 同名的.dll, 真假孙悟空,假悟空让我取不了真经; 如果只是相应的库没有找到,按照经验windows 都会报错缺少 "xxxx.dll"。
全局搜索了一下电脑,发现叫 libgcc_s_seh-1.dll的文件可真多啊。

总结

主要记录了一次BUG的排查过程,主要思想是先找到对的,再去控制变量,执果索因找到不对的。 因为感觉这个问题很有可能会再次遇到,所以先记录下来,也分享给大家。

最新文章

  1. CSS3学习之分享下transition属性
  2. 总结一下 input propertychange
  3. java.sql.SQLException: ORA-00911: invalid character 解决方法
  4. socket 通信
  5. javascript 函数声明与函数表达式的区别
  6. storm-kafka-0.8-plus 源码解析
  7. table常用
  8. [Hadoop] - Cannot run program "cmake"
  9. 自己实现一个each迭代器
  10. 新闻热词:从爬虫到react native应用
  11. dwr3+spring实现消息实时推送
  12. WinForm程序完全退出总结
  13. JDK源码分析(一)—— String
  14. LeetCode算法题-Guess Number Higher or Lower(Java实现)
  15. python 链表表达式 map、filter易读版
  16. JavaScript-DOM(1)
  17. day05 None类型
  18. Codeforces852G(字符串hash)
  19. 如何确定一个NFS的mount是v3还是v4?
  20. linux下nginx tomcat集群

热门文章

  1. 使用单调队列维护决策三元组实现决策单调性优化DP的一些细节
  2. ubuntu搭建、安装gitlab服务器以及初始化密码
  3. C++入门经典-例5.3例5.4-输出int指针运算后的地址值
  4. 191107Django的Cookie和Session
  5. 云服务器搭建anaconda pytorch torchvision
  6. 后盾网lavarel视频项目---lavarel多表关联一对多操作实例
  7. [论文理解] CapsuleNet
  8. 用layui的 form.on提交表单如何禁止刷新页面
  9. leetcode886可能的二分法
  10. Object 源码阅读