問題タブ [bionic]

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.

0 投票する
1 に答える
403 参照

c - 代替シグナル スタックの調査 (さまざまな割り当て方法)

代替シグナルスタック( )を試していますman sigaltstack

スタックを異なる方法で割り当てる 2 つのコード:

シグナルの登録中に SA_ONSTACK を使用しただけです。シグナル スレッドがスケジュールされている間、pthread_create で、このフラグが設定されている場合、8kb のスタックが次のように割り当てられます ( SIGSTKSZ = 0x2000(8kb) )。

シグナルハンドラを登録しながら、同じことを行う別の方法。

この場合、デフォルトのスタックを割り当てるために bionic に依存していません。私は自分のスタックを割り当てて使用しています。

したがって、どちらの場合も、8kb のシグナル スタックを割り当てています。

while(1)内部シグナルハンドラを配置proc/pid/mapsし、プロセスにシグナルを送信した後に確認しました。

結果は次のとおりです。

方法 1 (pthread_create で bionic によって割り当てられたスタック):

方法 2 (アプリケーションによって malloc を使用して割り当てられたスタック):

奇妙なことに、method2 で malloc() を使用して 8kb のスタックしか割り当てなかったのに、スタックは約 2MB(0x200000) 割り当てられたようです。

何がうまくいかなかったのか、それとも予想される動作なのか、親切にアドバイスしてください。

0 投票する
0 に答える
755 参照

android - 最新の Android NDK libc で新しいメソッドを使用する

私は NDK の最新バージョン (数週間前) の r10d を使用し、ビルド ツールを使用して Python と Python のいくつかの拡張機能をビルドしています。ビルド ツールを使用して、Android Studio のプロジェクトにリンクされる共有オブジェクトを作成します。組み込み Python ライブラリをビルドする Android スタジオ以外のビルド環境では、最新のプラットフォームを自動的に使用するため、この場合は NDK_ROOT/platforms/android-21 を使用しています。

すべて正常にビルドされましたが、4.4.4 を実行しているデバイスで次のエラーでクラッシュしました:

そのため、調査を行ったところ、Python 拡張機能の 1 つがこのメソッドを使用しており、NDK の sys/epoll.h で定義されていることがわかりました。ただし、プラットフォーム android-21 の bionic に追加されました (API 16 から構築しているので、まだこれに遭遇していないことに驚いています)。以前のプラットフォーム ライブラリでは、メソッドはエクスポートされません。したがって、このメソッドは最新の android-21 libc に追加されたばかりだと思います (android-21 libc.a ライブラリとヘッダーに存在することを確認しましたが、android-19 以下には存在しないことを確認しました。

最善の方法について少しアドバイスを求めています。現状では、いくつかのオプションがあると思います。1) 代わりに android-20 NDK プラットフォームに対してビルドします。この場合、configure スクリプトは拡張機能でのメソッドの使用を除外し、すべてが満足します。2) 代わりに epoll_create() を呼び出すように拡張コードを変更しますが、上流のリポジトリと同じにしておきたいです。3) android-21 usr/lib ディレクトリ内の静的な libc.a に対してリンクします...これは私が少し警戒しています。これでいいでしょうか?

ありがとう、クリス

0 投票する
0 に答える
188 参照

android - Bionic に欠けている機能

Androidで実行するためにHaskellをクロスコンパイルしています。数日間苦労した後、残っている唯一の問題は、Android (Bionic) の libc に glibc にあるいくつかの機能がないことです。より正確には、getnetent、setnetent、endnetent、getprotoent、setprotoent、endprotoent、sethostent、および endhostent です。

私が見る限り、私には2つの選択肢があります。または、glibc をクロスコンパイルして、それを静的にプログラムにリンクしようとします。いくつかのグーグル検索は、これが機能する可能性があることを示唆しています。より簡単な解決策は、これらの関数を自分で作成することです。しかし、これが可能かどうかを知るには、libc に精通していませんか? これらの関数の C コードも見つかりませんでした

0 投票する
1 に答える
1729 参照

android-ndk - Androidアプリケーションにlibcを追加するには?

ndkを使用してAndroidで実行したいCコードを書いています。私が理解しているように、コードにはglibcライブラリがあり、直接移植するのは困難です。したがって、github の bionic リポジトリから libc を代わりに使用しようとしました。ビルド中に多くのエラーに直面しています。

ステップバイステップの手順にlibcを含める方法を誰かが説明できますか(または、いくつかのソースに案内してください)。私はたくさん検索しましたが、どこにもチュートリアルが見つかりませんでした。

これらは私が得るエラーです:

修正方法は?ありがとう!

0 投票する
0 に答える
308 参照

android - Android libc に syscall を追加する際の問題

助けてください。私は Android マシュマロ (6.0) のソース コードを扱っており、アプリケーションを移植するための Linux メッセージ キューと共有メモリ関連のシステム コールのサポートが必要です。以前は Kitkat のソース コードを使用していましたが、その中で動作していました。

そのために私が行った手順は次のとおりです。

  1. /BSP/Bionic/libc/SYSCALLS.TXT に syscall を追加
  2. gensyscalls.py スクリプトを使用して生成された asm スタブ。
  3. エラー libc なしでコンパイルされましたが、生成された libc.so には追加されたシンボルが含まれていません。

前もって感謝します。

/BSP/Bionic/libc/SYSCALLS.TXT に追加された Syscall:

  • int semctl(int semid, int semnum, int cmd, ...) すべて
  • int semget(key_t key, int nsems, int semflg) すべて
  • int semop(int semid, struct sembuf* sops, size_t nsops) すべて
  • void* shmat(int shmid, const void* shmaddr, int shmflg) すべて
  • int shmctl(int shmid, int cmd, struct shmid_ds* buf) すべて
  • int shmdt(const void* shmaddr) すべて
  • int shmget(key_t キー, size_t サイズ, int shmflg) すべて
  • int msgctl(int msqid, int cmd, struct msqid_ds *buf) すべて
  • int msgget(key_t key, int msgflg) すべて
  • int msgrcv(int msqid, void* msgp, size_t msgsz, long int msgtyp, int msgflg) すべて
  • int msgsnd(int msqid, const void* msgp, size_t msgsz, int msgflg) すべて
0 投票する
1 に答える
1176 参照

android-ndk - Bionic と libc のスタブ実装

Android 以外の Linux マシンで apk から取得した x86 共有ライブラリを実行したいと考えています。

Android libc に対してリンクされているためlibc.so、Android ndk から取得しました。しばらくセグメンテーション違反をデバッグした後、これlibc.soは「チート」であり、多くのライブラリ関数の nop 実装しか含まれていないことがわかりました。

現在、ndk にlibc.aはこれらの関数の実際の実装を含む a も含まれていますが、プロセスでこれらをロードして libc.so の nop 関数をオーバーライドするにはどうすればよいですか? Androidがこのトリックを実行している理由と、オーバーライドがそこでどのように機能するかについて、さらにいくつかのコンテキストにも興味があります。

0 投票する
0 に答える
125 参照

android - Bionic ツールチェーン ld 再配置可能オブジェクト ファイルの問題

Arm-android 用に GRPC C++ をクロスコンパイルしようとしていますが、いくつかのライブラリのリンク中に、ld から次のエラーが発生しました。

このエラーの原因を知っている人はいますか? .cc ファイルはすべて-fPICフラグ付きでコンパイルされます。