ターゲットファイルの実行に起因する問題:syntax error:word unexpected(expe...
3891 ワード
今日、ターゲットファイルを実行可能ファイルとして開発ボードに誤って配置して実行した結果、./hello_qt:line 1:syntax error:word unexpected(expecting"))、これまでこのことに遭遇したことがないので、少しぼんやりしていますが、簡単なhello worldで問題はありません.そこでgoogleは、もともと小さな-cコンパイルオプションが幽霊だった.***
armとpcで実行するターゲットファイルの違い
一般的に、gcc-cオプションでコンパイルされたターゲットファイルは実行できないため、特にPCではこのような問題に遭遇することはありません.こちらはwindowsワークベンチにファイルを転送し、tftpでダウンロードした開発ボードにファイルがすべて普通のファイルで、自分でchmod+xを変更して実行できるので、油断してやっとこの問題にぶつかった. PCでターゲットファイルを実行するエラーメッセージ ARMでクロスコンパイル対象ファイルを実行するエラーメッセージ
ターゲットファイルと実行可能ファイルの区別
ターゲットファイルと実行可能ファイルは普段から区別しやすいので、一般的には注意しません.しかし、今日の問題から、私はまた両者の違いについて多くのことを学びました.そして、両者を区別するLinuxツールも学びました. fileツール:ファイルの基本プロパティ情報を表示する
どちらもELFファイルですが、ターゲットファイルはrelocatable、実行可能ファイルはexecutableです. readefツール:ELFファイルの詳細を表示する
Entry point addressは、ファイルの実行エントリポイントを表し、実行可能ファイルのみが値を持つが、ターゲットファイルはリダイレクト可能ファイルであり、直接実行できないため、この値は0である.
ターゲットファイルの両方は次のとおりです.
armとpcで実行するターゲットファイルの違い
一般的に、gcc-cオプションでコンパイルされたターゲットファイルは実行できないため、特にPCではこのような問題に遭遇することはありません.こちらはwindowsワークベンチにファイルを転送し、tftpでダウンロードした開発ボードにファイルがすべて普通のファイルで、自分でchmod+xを変更して実行できるので、油断してやっとこの問題にぶつかった.
~/test$ ./zh_display.o
-bash: ./zh_display.o: cannot execute binary file
$ ./hello_qt
./hello_qt: line 1: syntax error: word unexpected (expecting ")")
PCのヒント情報は一目でわかりますが、ARMのヒントは不思議です.最初は自分のコードに問題があるのではないかと疑って、繰り返しチェックしましたが、幸いにも簡単なhello worldプログラムで、さもなくば私は憂鬱です.私がタイムリーにgoogleのおかげで、さもなくばまたどのくらいの时間を浪費してこの小さい問題の上で知らないで、时にはgoogleは本当にとても重要です!!ターゲットファイルと実行可能ファイルの区別
ターゲットファイルと実行可能ファイルは普段から区別しやすいので、一般的には注意しません.しかし、今日の問題から、私はまた両者の違いについて多くのことを学びました.そして、両者を区別するLinuxツールも学びました.
~/test$ file hello_qt
hello_qt: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), not stripped
~/test$ file hello_qt.o
hello_qt.o: ELF 32-bit LSB relocatable, ARM, version 1, not stripped
どちらもELFファイルですが、ターゲットファイルはrelocatable、実行可能ファイルはexecutableです.
~/test$ readelf -h hello_qt
ELF Header:
Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: ARM
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x87f8
Start of program headers: 52 (bytes into file)
Start of section headers: 3948 (bytes into file)
Flags: 0x202, has entry point, GNU EABI, software FP
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 6
Size of section headers: 40 (bytes)
Number of section headers: 27
Section header string table index: 24
~/test$ readelf -h hello_qt.o
ELF Header:
Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: ARM
ABI Version: 0
Type: REL (Relocatable file)
Machine: ARM
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 1040 (bytes into file)
Flags: 0x200, GNU EABI, software FP
Size of this header: 52 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 40 (bytes)
Number of section headers: 16
Section header string table index: 13
-hオプションELFファイルのファイルヘッダ情報を読み込みます.この2つの値に注意してください.TypeとEntry point addressです.Type情報はfileのファイルタイプであり、Entry point addressは、ファイルの実行エントリポイントを表し、実行可能ファイルのみが値を持つが、ターゲットファイルはリダイレクト可能ファイルであり、直接実行できないため、この値は0である.
ターゲットファイルの両方は次のとおりです.
Type: REL (Relocatable file)
Entry point address: 0x0
実行可能ファイルの両方は、次のとおりです.Type: EXEC (Executable file)
Entry point address: 0x87f8