交叉编译不能加载.so文件的问题

Bright__M 2016-11-02 07:12:24
PC系统:Ubuntu 14.04LTS
$ cat /proc/version
Linux version 3.13.0-32-generic (buildd@roseapple) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #57-Ubuntu SMP Tue Jul 15 03:51:12 UTC 2014

ARM板子:LeMaker/banana pro
$ cat /proc/version
Linux version 3.4.103 (bananapi@lemaker) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #4 SMP PREEMPT Thu Dec 18 12:55:58 CST 2014

PC使用apt-get安装交叉编译器arm-linux-gcc-gnueabihf-4.8,交叉编译Qt成功移植到板子上但是出现错误 "GLIBC_2_15"not found ,经度娘发现PC交叉编译工具的库比板子的库版本高。
经过多番折腾决定改用其他现成的交叉编译工具,从网上下载了友善之臂的交叉编译工具arm-linux-gcc-4.4.3,又折腾了一番,编译成功,移植到板子上,但是出现error while loading shared libraries: libQtNetwork.so: cannot open shared object file: No such file or directory 怀疑运行环境没有配置对,已经一番折腾配置应该没有错误。
又经过一番折腾,怀疑交叉编译出来的.so文件都不能被加载,于是手动做了一个.os文件试验,如下
------------test.c--------
1 #include "test.h"
2 #include "stdio.h"
3 void ptest(void)
4 {
5 printf("test .so\r\n");
6 }
------------test.h--------
1 #ifndef _TEST_H_
2 #define _TEST_H_
3
4 void ptest(void);
5
6
7 #endif
分别用arm-linux-gcc-gnueabihf-4.8(用apt-get安装的)和arm-linux-gcc-4.4.3(手动安装的)交叉编译了一个.so文件,到板子上写了个程序调用,发现前者是可以运行,后者是error while loading shared libraries: test.so: cannot open shared object file: No such file or directory
用file看一下两个分别是
使用arm-linux-gcc-gnueabihf-4.8编译的.so
libtest.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x661edee8ec8199f8e3e0ec710390fa63018b8487, not stripped

使用arm-linux-gcc-4.4.3编译的.so
libtest.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

发现后者没有BuildID这个信息,BuildID百度一下没有找到详解,估计出现错误也是因为缺少这个东西。
小弟菜鸟一只,想请个路大神帮忙解答一下
...全文
710 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
诺水城子 2016-11-03
  • 打赏
  • 举报
回复
确保库以及依赖的其他库动用相同的gcc编译,然后makeclean重新编译应用程序
Arnold9009 2016-11-03
  • 打赏
  • 举报
回复
找板子供应商要一套编译工具链
cocoabird 2016-11-02
  • 打赏
  • 举报
回复
换个gcc版本试试,这问题没啥好办法,就得多摸索

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧