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

背景

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

链接Caffe,程序报错应用程序无法正常启动(0xc000007b)的更多相关文章

  1. 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

    运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such f ...

  2. eclipse运行hadoop程序报错:Connection refused: no further information

    eclipse运行hadoop程序报错:Connection refused: no further information log4j:WARN No appenders could be foun ...

  3. Window7中Eclipse运行MapReduce程序报错的问题

    按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程 ...

  4. WinDbg抓取程序报错dump文件的方法

    程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点 ...

  5. 解决C语言程序报错:return type defaults to‘int’

    下面是通过自定义一个函数printN,之后在main函数中调用printN,使得可以通过输入整数N,将从1到N的全部整数都打印出来的程序. 但是在编译过程中却报错: return type defau ...

  6. 小程序报错 TLS 版本必须大于等于 1.2

    https://www.cnblogs.com/phpper/p/6866036.html 服务器是windows 2008 server 环境是IIS7SSL是申请用的阿里免费.微信小程序发现wx. ...

  7. 记录微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function

    微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function 这个报错是在将数组对象通过 ...

  8. excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法

    excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法 office2007应该遇到“向程序发送命令时出现 问题”,设置为以管理员运行也不好用,重装office也不好用,下面介绍下 ...

  9. 【spring cloud】【IDEA】【maven】spring cloud多模块在idea上使用maven插件打包报错:程序包XXX不存在

    >>>>spring cloud 多模块 >>>>在idea上使用maven插件打包,欲打包成jar包后 进行部署 >>>> 报 ...

随机推荐

  1. 2019年9月17 发布 Java 13

    Java 13 明天发布,最新最全新特性解读   2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布. 目前,JDK官网 ...

  2. 四叉树的js实现

    基于 https://gamedevelopment.tutsplus.com/tutorials/quick-tip-use-quadtrees-to-detect-likely-collision ...

  3. 【nginx】 配置域名转发到相同地址不同端口下执行相应业务

    #doctor upstream doc { server 52.**.**.***:8090; } #patient upstream pat { server 52.**.**.***:8088; ...

  4. docker容器无法删除——状态Dead

    问题:由于容器挂载数据卷,无法直接删除. 解决: 先查出ID 进行杀掉,然后再删除. . 搞定

  5. SpringBoot深入了解

    核心配置文件 application 配置文件,主要用于 Spring Boot 项目的自动化配置. bootstrap 配置文件有以下几个应用场景. 使用 Spring Cloud Config 配 ...

  6. pandas dataframe类型操作

    用python做数据分析pandas库介绍之DataFrame基本操作   怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这 ...

  7. PLSQL导出表的数据insert语句

    “Where clause”可以设置查询条件.设置好文件导出的路径(“Output file”),点击[Export]按钮,就可以导出INSERT语句了. 导出之后使用nodepad打开: 但是如果我 ...

  8. Rate 评分

    评分组件 基础用法 评分被分为三个等级,可以利用颜色对分数及情感倾向进行分级(默认情况下不区分颜色).三个等级所对应的颜色用过colors属性设置,而它们对应的两个阈值则通过 low-threshol ...

  9. Linux日志筛选命令

    (1)Linux目录操作命令 cd ..退出当前目录,返回上一级目录:cd / 退出当前目录,返回根目录: mkdir命令用于创建一个新的目录:rmdir命令功能删除指定的空目录. (2)Linux筛 ...

  10. 戴尔服务器IDRAC命令配置IP地址

    在工作中我们可能会遇到,在配置管理卡的时候,由于疏忽,把网关配置错误(但是你肯定的是IP没有错),导致不能正常连接管理卡,这是有两个办法,第一:你去机房,进行查看进行修改,第二:你登陆交换机,从交换机 ...