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

现象:

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

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


分析:

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


解决:

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

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

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




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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值