問題タブ [codesourcery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 競合する Achitecture プロファイル A/M arm-none-linux-gnueabi-gcc を使用したエラー
私の悪い英語でごめんなさい。私の PC には Ubuntu があり、これを使用してSTM32L-DISCOVERYをプログラムしています。プログラムは正常にコンパイルされましたが、アプリケーションのリンク中にエラーが発生しました。私はそのようなデバイスの開発の初心者です。そのため、IDE として Eclipse を使用し、Code Sourcery インストゥルメントを使用しています。コマンドarm-none-linux-gnueabi-gccを使用してプログラムをコンパイルし、そのフラグでコンパイルします。
そして、同じコマンドを使用してそのフラグとリンクしています:
さて、最後のコマンドを実行した後、次のようなエラーが表示されます。
エラー: /usr/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../arm-none-linux-gnueabi/libc/thumb2/lib/ld-linux.so.3: 競合するアーキテクチャ プロファイル A/M stm32ld_template C/C++ 問題のエラー: / usr/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../arm-none-linux-gnueabi/libc/thumb2/lib/libc.so.6: 競合するアーキテクチャ プロファイル A/M stm32ld_template C/C++ 問題のエラー: /usr/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux /bin/../arm-none-linux-gnueabi/libc/thumb2/lib/libgcc_s.so.1: 競合するアーキテクチャ プロファイル A/M stm32ld_template C/C++ 問題
リンク コマンドでフラグ-mthumbを削除すると、エラーは発生しません。しかし、プログラムをデバッグしようとすると、 で終了しFunction main not defined
ます。デバッグにもst-utilを使用しています。デバッグしようとすると、次のように表示されます。
そして私のmain.c:
私が間違っていることは何ですか?私を助けてくれる人に感謝します。
EDIT1:
-nodefaultlibs をリンク コマンドに追加したので、うまくリンクされるようになりました。しかし、デバッグはまだ機能していません。
cross-compiling - enigma2(mips)OpenEmbeddedのbinへのshスクリプトのクロスコンパイル
Enigma2 OpenEmbedded で動作するドリームボックス衛星受信機があります。つまり、MIPS アーキテクチャです。Ubuntu PC で .sh ファイルを Enigma2 バイナリ ファイルにクロス コンパイルしたいと考えています。
Ubuntu PC に mips32 アーキテクチャ用の codesourcery クロス コンパイル ツールチェーンをインストールしました。
ツールチェーン情報:
SHC を使用して .sh ファイルを .c ファイルに変換し、次のコマンドでその c ファイルを mips バイナリにクロスコンパイルしました。
エラーは見られませんでした (とてもうれしかったのですが、残念ながら (以下を参照))。次に、binファイルをenigma2ボックスにコピーして実行しようとしました...
MIPS ボックスで出力バイナリを実行すると、次のように表示されます。
明らかに、クロスコンパイルコマンドで何かを忘れていましたが、何ですか?
mips - MIPS GCC コンパイルの間違った MIPS リリース?
ルーターのハッキングの領域に突入しようとしています。現在、dd-wrt を実行しているルーターである F7D7302 v1 で単純な hello world を実行しようとしています。cpuinfo は、BCM4716 を明らかにし、「MIPS 74K V4.0」を CPU の「モデル」として示します。
CodeSourcery の MIPS クロスコンパイラをダウンロードしました。その時点から、コンパイル済みの実行可能ファイルを取得するのは非常に簡単でした。ファイルを転送し、ファイルを chmod +x しましたが、実行されませんでした。
私はスヌーピングを行うことに決め、ルーターのビジーボックス実行可能ファイルで「ファイル」を実行しました。
そして、私のハローワールドで「ファイル」を実行します:
静的ライブラリを使用してルーターでテストを実行すると、100% の CPU ハングが発生しました。動的ライブラリで実行すると、'not found' エラーが発生しました。適切な権限がすべて設定されました。
私が間違っていることを知っている人はいますか?
arm - .ARM.exidx が使用される場合
私は mbxxx ターゲットで Contiki 2.7 に取り組んでいます。私のコードをビルドしている間、リンカは .ARM.exidx と .data セクションのオーバーラップについて不平を言いました。リンカー スクリプト contiki-2.7/cpu/stm32w108/gnu-stm32w108.ld を少しいじった後、次のように置き換えて問題を修正しました。
と:
後で、objdump -h を使用して他のサンプル アプリケーションのヘッダー リストを表示しようとしたときに、この特定の .ARM.exidx セクションが見つかりませんでしたが、それはアプリケーションに存在していました。.ARM.exidx についてグーグルで調べたところ、C++ の例外処理に使用されていることがわかりました。私のコードは純粋な C コードなので、なぜこのセクションが私のコードにあるのですか? 通常、.ARM.exidx がコードに存在するのはいつで、そのユーティリティは何ですか?
================================================== ================================
いいえ、そのようなコンパイラ オプションはありません。私は実際に AxTLS API を使用しており、証明書を処理するコードを切り取って contiki に移植しました。さらに掘り下げてみると、bigint の実装で怪しい動作が見つかりました。簡単に言うと... bigint.c ファイルの関数の本体は次のとおりです。
コメントアウトされた部分 (r 変数の割り当て) がコメント解除されている場合、.ARM.exidx が表示されますが、それ以外の場合は表示されません! これで説明できる???
================================================== ================================
の実装で使用されている通常とは異なるものは見つかりませんでしたalloc()
。コードの別の領域で使用されている の参照が 2 つあり、これをおよびalloca()
に置き換えましたが、それでも問題は解決しませんでした。実装には、およびへの呼び出しのみがあります。malloc()
free()
alloc()
malloc()
realloc()
free()
gcc - PCRE を CodeSourcery ツールチェーンとクロスコンパイルしますか?
ここでコンパイルしようとしPCRE
てCodeSourcery
いるのは私の構成スクリプトです
今は正常にコンパイルされていますが、Androidでそのバイナリを実行しようとすると、次のようになります:
curl、opensslをクロスコンプするときにも同様の問題がありますが、テストコードを実行すると
次のオプションでコンパイルします
できます
android - 静的にリンクされたバイナリには共有ライブラリ libnss が必要です
ここで問題を提供した後でも見つけたlinaroとcodesourceryツールチェーンを使用してAndroid用にクロスコンパイルしていまし-static
たが、glibc dynamic link から発生しているようlibnss_* libraries
です。
これが私のコードです
次のコマンドを実行します
それをトレースした後、次の出力が得られました
11455 uname(0xf6ffeb70) = 0
11455 brk(NULL) = 0x0006d000
11455 brk(0x0006dd00) = 0x0006dd00
11455 brk(0x0008ed00) = 0x0008ed00
11455 brk(0x0008f000) = 0x0008f000
11455 socket(1,526337,0,0,445504,319244) = 3
11455 connect(3,0xf6ffea30,110) = -1 errno=2 (No such file or directory)
11455 close(3) = 0
11455 socket(1,526337,0,1,445504,0) = 3
11455 connect(3,0xf6ffeb50,110) = -1 errno=2 (No such file or directory)
11455 close(3) = 0
11455 open("/etc/nsswitch.conf",O_RDONLY|O_CLOEXEC) = 3
11455 fcntl64(3,F_GETFD) = 1
11455 fstat64(3,0xf6ffeb78) = 0
11455 mmap2(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0xf67fe000
11455 read(3,0xf67fe000,4096) = 513
11455 read(3,0xf67fe000,4096) = 0
11455 close(3) = 0
11455 munmap(0xf67fe000,4096) = 0
11455 open("/etc/ld.so.cache",O_RDONLY|O_CLOEXEC) = 3
11455 fstat64(3,0xf6ffe450) = 0
11455 mmap2(NULL,88624,PROT_READ,MAP_PRIVATE,3,0) = 0xf67e9000
11455 close(3) = 0
11455 access("/etc/ld.so.nohwcap",F_OK) = -1 errno=2 (No such file or directory)
11455 open("/lib/arm-linux-gnueabihf/libnss_compat.so.2",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
11455 stat64("/lib/arm-linux-gnueabihf",0xf6ffe488) = -1 errno=2 (No such file or directory)
11455 open("/usr/lib/arm-linux-gnueabihf/libnss_compat.so.2",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
11455 stat64("/usr/lib/arm-linux-gnueabihf",0xf6ffe488) = -1 errno=2 (No such file or directory)
11455 open("/lib/libnss_compat.so.2",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
11455 stat64("/lib",0xf6ffe488) = 0
11455 open("/usr/lib/libnss_compat.so.2",O_RDONLY|O_CLOEXEC) = -1 errno=2 (No such file or directory)
11455 stat64("/usr/lib",0xf6ffe488) = 0
11455 munmap(0xf67e9000,88624) = 0
11455 exit_group(0)
動的に必要なすべてのライブラリを静的にリンクするにはどうすればよいですか、または glibc をクロスコンパイルする必要がありますか?
まあ、私はNDKを使用することに賛成ではありません.nginxを何らかの方法でクロスコンパイルしようとしていますが、localhostにアクセスするとnginxが応答しません:8080
c - Makeファイルに問題がある
に問題がありdouble
ます。ターミナルを介して、いくつかの数値を指定する必要があるクエリがあります (たとえば、1 時間あたりの遅延)。端末から 1.1 h などの数値を入力すると、約 -1173000 と出力されます。1.1 のみを出力する必要があります。
Makefile
おそらく、FreeRTOSに問題があると思います。(FreeRTOS を介して STM32F407 プロセッサにコンパイルされないためです!)
この行の何かを修正する必要があると思います!
の完全なコードは次のMakefile
とおりです。
makefile - rtl8192cu ドライバーのクロスコンパイルが失敗する
Linux x86 マシンでrtl8192cu ドライバーを ARM マシン用にクロスコンパイルしようとしています。Realtek の Web サイトからドライバーをダウンロードしました。コンパイル ガイドでは、Makefile の編集について次のように言及しています。
$PATH 変数に、モジュールのクロスコンパイルに使用するツールチェーンの場所が含まれていることを確認してください。このディレクトリの場所については、セットアップ手順を参照してください。
KSRC 環境変数を Beagleboard のカーネル ソースの場所に設定します (このディレクトリ パスについては、クロスコンパイル環境のセットアップ手順を参照してください)。
KVER 環境変数をビーグルボードのカーネル バージョンに設定します。
この理由で、私は編集しました:
KVER := 2.6.32
(2.6.32.はBBのカーネルバージョン)
KSRC ?= /home/demetres/linux-2.6.32.61
(コンパイルされたカーネル ソース、BB から取得、保存されているhome/demetres/linux-2.6.32.61
場所)
私の質問は:
Makefile のフィールドで何を編集する必要がありますCROSS_COMPILE:
か? パスを編集しまし/home/demetres/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin
たが
make
、次のエラーで失敗します:
情報: x86 マシンのクロスツールチェーンは CodeSourcery からのものです。arm-none-linux-gnueabi-gcc helloworld.c –o helloworld
場所で を実行して、BB 用の helloworld.c をクロスコンパイルしましたCodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin
。