记一次诡异的程序运行起始就段错误

来源:互联网 发布:网络教育大专文凭 编辑:程序博客网 时间:2024/05/16 10:46

现象:

用交叉编译器编译了一个程序到板子上运行,发现运行时段错误,连main函数下第一句log都没有打印。

也就是诡异还没进入main函数就已经段错误。


分析:

程序运行时理论上应该先准备分配内存,然后将所需要的库映射到对应的共享库区域,因为比较懒,所懒得在板子上搭建gdb开发环境,所以分析大概率为共享库加载出错。


解决:

其实我的程序编译时依赖了两个共享库,分别为A和B,但是实际上我并没有调用库A,是库B依赖了库A ,但是由于库B在编译时没有加-lA,居然能编译通过,所以就没有管,而在编译我的程序时就会发现如果不加上-l库A就会报库A函数没有定义的错误,遂我在编译程序是加上了链接库A,表面上编译通过,没有任何问题,但在板子上运行时就会直接段错误。

还有一点就是编译共享库时不加链接依赖的三方库的话编译并不会报错,但是在运行时就会在main函数之前段错误,所以在编译程序时一定要加上依赖的库的依赖的三方库。

所以解决方式也一样,编译共享库时如果有依赖,一定要老老实实加上依赖,不然这种奇葩问题,还是搞扯的。




分析不够深入,期待有大神看到又在指教。

阅读全文
0 0