2016-04-01 3 views
0

I VAR-SOM-AM33 Board verwenden und will Beispielcode wie hallo Welt läuft auf dem Gerät laufen und es gibt -sh: ./ Test: Fehler nicht gefundenLinkers Ausgabe während Kreuzkompilierung für Cortex-A8-Gerät

Toolchain verwendete für Kompiliercode ist gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.

-Code ist als unten

#include <stdio.h> 
    int main(){ 
    printf("hello world"); 
    return 0; 
} 

für crosscompile Datei

arm-linux-gnueabihf-gcc test.c -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8 -o test 

binären Ausgang zeigt als

test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=2ce1c5b3d97dac2093fe2cd2d340cdaa9989923f, not stripped 

Nach Kopie, die Hardware-Datei in folgt und führen Sie es zeigt folgende Fehler

[email protected]:~# ./test 
-sh: ./test: not found 

Dateiberechtigungen ändern auch durch

[email protected]:~# chmod +x test 

aber Ergebnis zeigt gleiche Fehler nicht gefunden.

Demo-Datei, die auf Hardware ausgeführt wird, seine Architektur wie folgt

[email protected]:~# readelf -A /usr/bin/hello 
Attribute Section: aeabi 
File Attributes 
Tag_CPU_name: "7-A" 
Tag_CPU_arch: v7 
Tag_CPU_arch_profile: Application 
Tag_ARM_ISA_use: Yes 
Tag_THUMB_ISA_use: Thumb-2 
Tag_VFP_arch: VFPv3 
Tag_Advanced_SIMD_arch: NEONv1 
Tag_ABI_PCS_wchar_t: 4 
Tag_ABI_FP_denormal: Needed 
Tag_ABI_FP_exceptions: Needed 
Tag_ABI_FP_number_model: IEEE 754 
Tag_ABI_align8_needed: Yes 
Tag_ABI_align8_preserved: Yes, except leaf SP 
Tag_ABI_enum_size: int 
Tag_ABI_HardFP_use: SP and DP 

und Datei, die Quer kompiliert wird, seine Architektur wie folgt

[email protected]:~# readelf -A test 
Attribute Section: aeabi 
File Attributes 
Tag_CPU_name: "7-A" 
Tag_CPU_arch: v7 
Tag_CPU_arch_profile: Application 
Tag_ARM_ISA_use: Yes 
Tag_THUMB_ISA_use: Thumb-2 
Tag_VFP_arch: VFPv3 
Tag_Advanced_SIMD_arch: NEONv1 
Tag_ABI_PCS_wchar_t: 4 
Tag_ABI_FP_denormal: Needed 
Tag_ABI_FP_exceptions: Needed 
Tag_ABI_FP_number_model: IEEE 754 
Tag_ABI_align8_needed: Yes 
Tag_ABI_align8_preserved: Yes, except leaf SP 
Tag_ABI_enum_size: int 
Tag_ABI_HardFP_use: SP and DP 
Tag_ABI_VFP_args: VFP registers 
Tag_CPU_unaligned_access: v6 
Tag_unknown_44: 1 (0x1) 

Auch Hardware cpuinfo ist als

folgt
[email protected]:~# cat /proc/cpuinfo 
Processor : ARMv7 Processor rev 2 (v7l) 
BogoMIPS : 718.02 
Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls 
CPU implementer : 0x41 
CPU architecture: 7 
CPU variant : 0x3 
CPU part : 0xc08 
CPU revision : 2 

Hardware : Variscite VAR-SOM-AM33 
Revision : 0000 
Serial  : 0000000000000000 

Ich habe versucht, den Befehl ldd auf dem Zielgerät auszuführen.

So vermute ich, dass das Problem mit dem Linker verwandt ist. Wenn ich die Datei einfach kompiliere, ohne sie zu verknüpfen.

arm-linux-gnueabihf-gcc -mtune=cortex-a8 -march=armv7 -O -c test.c -o test 

Jetzt, wenn ich diese Datei ausführen, bekomme ich diesen Fehler.

[email protected]:~# chmod +x test 
[email protected]:~# ./test 
./test: line 1: syntax error: word unexpected (expecting ")") 

schlagen Sie bitte vor, wie Sie das beheben können.

+0

Eine weitere Sache wäre zu prüfen sein, um sicherzustellen, dass eine statisch gelinkte Build OK läuft - wenn ja, dass es defnitely bis zu einem Abhängigkeitsproblem verengt. – Notlikethat

Antwort

0

Danke für die Lösung, fand ich Fehler mit Linker.

vorhandene Datei hat Linker ld-linux.so.3 und crosscompiled Datei hat Linker ld-linux-armhf.so.3

[email protected]:/usr/bin# readelf -l hello 

Elf file type is EXEC (Executable file) 
Entry point 0x82fc 
There are 8 program headers, starting at offset 52 

Program Headers: 
    Type   Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 
    EXIDX   0x00044c 0x0000844c 0x0000844c 0x00008 0x00008 R 0x4 
    PHDR   0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4 
    INTERP   0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1 
     [Requesting program interpreter: /lib/ld-linux.so.3] 

crosscompiled Datei Programmkopf

[email protected]:~# readelf -l test 

Elf file type is EXEC (Executable file) 
Entry point 0x82f9 
There are 8 program headers, starting at offset 52 

Program Headers: 
    Type   Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 
    EXIDX   0x000450 0x00008450 0x00008450 0x00008 0x00008 R 0x4 
    PHDR   0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4 
    INTERP   0x000134 0x00008134 0x00008134 0x00019 0x00019 R 0x1 
     [Requesting program interpreter: /lib/ld-linux-armhf.so.3] 

nach dem Wechsel, dass Linker-Programm auf dem Zielgerät ausgeführt wird.

[email protected]:~# cd /lib/ 
[email protected]:/lib# ls -l ld-linux.so.3  
lrwxrwxrwx 1 1000  1000   12 Aug 7 2012 ld-linux.so.3 -> ld-2.12.2.so 
[email protected]:/lib# ln -s /li ld-2.12.2.so ld-linux-armhf.so.3 
/lib/  /linuxrc 
[email protected]:/lib# ln -s /lib/ld-2.12.2.so ld-linux-armhf.so.3 
[email protected]:/lib# ldconfig 
[email protected]:/lib# cd 
[email protected]:~# ./test 
hello [email protected]:~#