打印
[嵌入式linux]

交叉编译QT应用程序在ARM板上无法运行

[复制链接]
5853|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangjunye|  楼主 | 2013-12-30 17:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好:
    我在为同事搭建ARM linux 的qt应用程序开发平台,遇到一些问题,请教大家。
PC 平台cat /proc/version
Linux version 3.8.0-19-generic (buildd@allspice) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) ) #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013


通过网上的教程拼凑的安装了PC上的QT环境。
which -a qmake
/usr/bin/qmake
/usr/local/Trolltech/Qt-4.7.4/bin/qmake

/usr/bin/qmake -v
QMake version 2.01a
Using Qt version 4.8.4 in /usr/lib/x86_64-linux-gnu

/usr/local/Trolltech/Qt-4.7.4/bin/qmake -v
QMake version 2.01a
Using Qt version 4.7.4 in /usr/local/Trolltech/Qt-4.7.4/lib


使用/usr/local/bin/qmake 编译简单的helloworld代码,生成文件:
Makefile  qt  qthellow.cpp  qthellow.o  qt.pro

查询依赖:
arm-linux-gnueabihf-readelf -a ./qt | grep "Shared library"
0x00000001 (NEEDED)                     Shared library: [libQtGui.so.4]
0x00000001 (NEEDED)                     Shared library: [libQtCore.so.4]
0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED)                     Shared library: [libc.so.6]

ARM板上查询这几个库是否存在:
# find /opt/Trolltech/lib/ -name libQtGui.so.4
/opt/Trolltech/lib/libQtGui.so.4
# find /opt/Trolltech/lib/ -name libQtCore.so.4
/opt/Trolltech/lib/libQtCore.so.4
# find / -name libstdc++.so.6
/usr/lib/libstdc++.so.6
# find / -name libgcc_s.so.1
/lib/libgcc_s.so.1
# find / -name libc.so.6
/lib/libc.so.6

用export查看:得到
export LD_LIBRARY_PATH='/opt/Trolltech/lib:/lib:/usr/lib'

拷贝qt文件,到ARM板上执行:
# ./qt
-sh: ./qt: not found

无法执行。
请各位帮忙支支招。

相关帖子

沙发
icecut| | 2013-12-30 17:48 | 只看该作者
拷贝qt文件,到ARM板上执行:
# ./qt
-sh: ./qt: not found

与上面那一堆废话没关系啊

使用特权

评论回复
板凳
zhangjunye|  楼主 | 2013-12-30 17:52 | 只看该作者
;P  介绍qt这个文件怎么来的。

使用特权

评论回复
地板
原野之狼| | 2013-12-31 08:52 | 只看该作者
arm-linux-gnueabihf-readelf -a ./qt | grep "ld.so"
看看有没有输出

然后到/lib下搜索一下是否存在该文件?

使用特权

评论回复
5
zhangjunye|  楼主 | 2013-12-31 10:34 | 只看该作者
原野之狼 发表于 2013-12-31 08:52
arm-linux-gnueabihf-readelf -a ./qt | grep "ld.so"
看看有没有输出

你这个命令没有输出。

我贴出all来吧。
baowei@ubuntu:/mnt/hgfs/share/qt$ arm-linux-gnueabihf-readelf qt -a
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x896d
  Start of program headers:          52 (bytes into file)
  Start of section headers:          4592 (bytes into file)
  Flags:                             0x5000402, has entry point, Version5 EABI, hard-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         31
  Section header string table index: 28

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES 标志寄存器 Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        00008154 000154 000019 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            00008170 000170 000020 00   A  0   0  4
  [ 3] .note.gnu.build-i NOTE            00008190 000190 000024 00   A  0   0  4
  [ 4] .gnu.hash         GNU_HASH        000081b4 0001b4 0000d4 04   A  5   0  4
  [ 5] .dynsym           DYNSYM          00008288 000288 0001e0 10   A  6   1  4
  [ 6] .dynstr           STRTAB          00008468 000468 000295 00   A  0   0  1
  [ 7] .gnu.version      VERSYM          000086fe 0006fe 00003c 02   A  5   0  2
  [ 8] .gnu.version_r    VERNEED         0000873c 00073c 000070 00   A  6   3  4
  [ 9] .rel.dyn          REL             000087ac 0007ac 000008 08   A  5   0  4
  [10] .rel.plt          REL             000087b4 0007b4 000070 08   A  5  12  4
  [11] .init             PROGBITS        00008824 000824 00000c 00  AX  0   0  4
  [12] .plt              PROGBITS        00008830 000830 0000bc 04  AX  0   0  4
  [13] .text             PROGBITS        000088ec 0008ec 0001c4 00  AX  0   0  4
  [14] .fini             PROGBITS        00008ab0 000ab0 000008 00  AX  0   0  4
  [15] .rodata           PROGBITS        00008ab8 000ab8 000010 00   A  0   0  4
  [16] .ARM.extab        PROGBITS        00008ac8 000ac8 000028 00   A  0   0  4
  [17] .ARM.exidx        ARM_EXIDX       00008af0 000af0 000020 00  AL 13   0  4
  [18] .eh_frame         PROGBITS        00008b10 000b10 000004 00   A  0   0  4
  [19] .init_array       INIT_ARRAY      00010ee4 000ee4 000004 00  WA  0   0  4
  [20] .fini_array       FINI_ARRAY      00010ee8 000ee8 000004 00  WA  0   0  4
  [21] .jcr              PROGBITS        00010eec 000eec 000004 00  WA  0   0  4
  [22] .dynamic          DYNAMIC         00010ef0 000ef0 000110 08  WA  6   0  4
  [23] .got              PROGBITS        00011000 001000 000048 04  WA  0   0  4
  [24] .data             PROGBITS        00011048 001048 000008 00  WA  0   0  4
  [25] .bss              NOBITS          00011050 001050 000004 00  WA  0   0  1
  [26] .comment          PROGBITS        00000000 001050 000055 01  MS  0   0  1
  [27] .ARM.attributes   ARM_ATTRIBUTES  00000000 0010a5 000035 00      0   0  1
  [28] .shstrtab         STRTAB          00000000 0010da 000115 00      0   0  1
  [29] .symtab           SYMTAB          00000000 0016c8 000800 10     30  90  4
  [30] .strtab           STRTAB          00000000 001ec8 000534 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  标志寄存器 Align
  EXIDX          0x000af0 0x00008af0 0x00008af0 0x00020 0x00020 R   0x4
  PHDR           0x000034 0x00008034 0x00008034 0x00120 0x00120 R E 0x4
  INTERP         0x000154 0x00008154 0x00008154 0x00019 0x00019 R   0x1
      [Requesting program interpreter: /lib/ld-linux-armhf.so.3]
  LOAD           0x000000 0x00008000 0x00008000 0x00b14 0x00b14 R E 0x8000
  LOAD           0x000ee4 0x00010ee4 0x00010ee4 0x0016c 0x00170 RW  0x8000
  DYNAMIC        0x000ef0 0x00010ef0 0x00010ef0 0x00110 0x00110 RW  0x4
  NOTE           0x000170 0x00008170 0x00008170 0x00044 0x00044 R   0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
  GNU_RELRO      0x000ee4 0x00010ee4 0x00010ee4 0x0011c 0x0011c R   0x1

Section to Segment mapping:
  Segment Sections...
   00     .ARM.exidx
   01     
   02     .interp
   03     .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .ARM.extab .ARM.exidx .eh_frame
   04     .init_array .fini_array .jcr .dynamic .got .data .bss
   05     .dynamic
   06     .note.ABI-tag .note.gnu.build-id
   07     
   08     .init_array .fini_array .jcr .dynamic

Dynamic section at offset 0xef0 contains 29 entries:
  Tag        Type                         Name/Value
0x00000001 (NEEDED)                     Shared library: [libQtGui.so.4]
0x00000001 (NEEDED)                     Shared library: [libQtCore.so.4]
0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED)                     Shared library: [libc.so.6]
0x0000000f (RPATH)                      Library rpath: [/usr/qt-arm-4.7.4/lib]
0x0000000c (INIT)                       0x8824
0x0000000d (FINI)                       0x8ab0
0x00000019 (INIT_ARRAY)                 0x10ee4
0x0000001b (INIT_ARRAYSZ)               4 (bytes)
0x0000001a (FINI_ARRAY)                 0x10ee8
0x0000001c (FINI_ARRAYSZ)               4 (bytes)
0x6ffffef5 (GNU_HASH)                   0x81b4
0x00000005 (STRTAB)                     0x8468
0x00000006 (SYMTAB)                     0x8288
0x0000000a (STRSZ)                      661 (bytes)
0x0000000b (SYMENT)                     16 (bytes)
0x00000015 (DEBUG)                      0x0
0x00000003 (PLTGOT)                     0x11000
0x00000002 (PLTRELSZ)                   112 (bytes)
0x00000014 (PLTREL)                     REL
0x00000017 (JMPREL)                     0x87b4
0x00000011 (REL)                        0x87ac
0x00000012 (RELSZ)                      8 (bytes)
0x00000013 (RELENT)                     8 (bytes)
0x6ffffffe (VERNEED)                    0x873c
0x6fffffff (VERNEEDNUM)                 3
0x6ffffff0 (VERSYM)                     0x86fe
0x00000000 (NULL)                       0x0
没贴全,超过2000个字符了。
其中的信息:
0x0000000f (RPATH)                      Library rpath: [/usr/qt-arm-4.7.4/lib]
/usr/qt-arm-4.7.4/lib这个路径在我电脑里是没有的,但在安装QT环境时,config有选项path我自己创建了/usr/qt-arm-4.7.4路径,但安装后这个路径下没有任何内容。qmake能用,我也就没管他。

使用特权

评论回复
6
zhangjunye|  楼主 | 2013-12-31 10:59 | 只看该作者
Library rpath: [/usr/qt-arm-4.7.4/lib]
应该是优先寻找lib的路径,应该没关系。

使用特权

评论回复
7
原野之狼| | 2013-12-31 11:31 | 只看该作者
[Requesting program interpreter: /lib/ld-linux-armhf.so.3]
这个东西能不能搜得到?

使用特权

评论回复
8
zhangjunye|  楼主 | 2013-12-31 11:38 | 只看该作者
ARM板上搜索:
# find ./ -name ld-linux-armhf.so.3
#
搜不到,很可能是他,因为我编译其他程序时在ARM板上也执行不了,但我当时使用-static 参数解决了。
这里用qmake,没法使用-static参数。无法静态编译。

使用特权

评论回复
9
原野之狼| | 2013-12-31 12:38 | 只看该作者
zhangjunye 发表于 2013-12-31 11:38
ARM板上搜索:
# find ./ -name ld-linux-armhf.so.3
#

这个就是最大的嫌疑犯了   在toolchain下找到它  拷到target上去

使用特权

评论回复
10
zhangjunye|  楼主 | 2013-12-31 14:28 | 只看该作者
拷过去还不行啊。:)
我好好分析一下readelf的信息。

我的configure
#./configure -embedded armv7 -xplatform qws/linux-arm-gnueabi-g++ -little-endian -opensource -host-little-endian -confirm-
license -nomake demos -nomake examples -no-pch -prefix /usr/qt-arm-4.7.4

谢谢各位的帮助啊

使用特权

评论回复
11
原野之狼| | 2013-12-31 17:33 | 只看该作者
zhangjunye 发表于 2013-12-31 14:28
拷过去还不行啊。
我好好分析一下readelf的信息。

用strace跟一下

使用特权

评论回复
12
swimchang| | 2013-12-31 21:09 | 只看该作者
在'PC上執行一下
file qt
然後 將訊息貼出來吧

使用特权

评论回复
13
黄小俊| | 2014-1-1 08:56 | 只看该作者
路过。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:想得多,做得少,人笨又不读书。

9

主题

139

帖子

1

粉丝