問題タブ [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.
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) 割り当てられたようです。
何がうまくいかなかったのか、それとも予想される動作なのか、親切にアドバイスしてください。
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 に対してリンクします...これは私が少し警戒しています。これでいいでしょうか?
ありがとう、クリス
android - Bionic に欠けている機能
Androidで実行するためにHaskellをクロスコンパイルしています。数日間苦労した後、残っている唯一の問題は、Android (Bionic) の libc に glibc にあるいくつかの機能がないことです。より正確には、getnetent、setnetent、endnetent、getprotoent、setprotoent、endprotoent、sethostent、および endhostent です。
私が見る限り、私には2つの選択肢があります。または、glibc をクロスコンパイルして、それを静的にプログラムにリンクしようとします。いくつかのグーグル検索は、これが機能する可能性があることを示唆しています。より簡単な解決策は、これらの関数を自分で作成することです。しかし、これが可能かどうかを知るには、libc に精通していませんか? これらの関数の C コードも見つかりませんでした
android-ndk - Androidアプリケーションにlibcを追加するには?
ndkを使用してAndroidで実行したいCコードを書いています。私が理解しているように、コードにはglibcライブラリがあり、直接移植するのは困難です。したがって、github の bionic リポジトリから libc を代わりに使用しようとしました。ビルド中に多くのエラーに直面しています。
ステップバイステップの手順にlibcを含める方法を誰かが説明できますか(または、いくつかのソースに案内してください)。私はたくさん検索しましたが、どこにもチュートリアルが見つかりませんでした。
これらは私が得るエラーです:
修正方法は?ありがとう!
android - Android libc に syscall を追加する際の問題
助けてください。私は Android マシュマロ (6.0) のソース コードを扱っており、アプリケーションを移植するための Linux メッセージ キューと共有メモリ関連のシステム コールのサポートが必要です。以前は Kitkat のソース コードを使用していましたが、その中で動作していました。
そのために私が行った手順は次のとおりです。
- /BSP/Bionic/libc/SYSCALLS.TXT に syscall を追加
- gensyscalls.py スクリプトを使用して生成された asm スタブ。
- エラー 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) すべて
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がこのトリックを実行している理由と、オーバーライドがそこでどのように機能するかについて、さらにいくつかのコンテキストにも興味があります。
android - Bionic ツールチェーン ld 再配置可能オブジェクト ファイルの問題
Arm-android 用に GRPC C++ をクロスコンパイルしようとしていますが、いくつかのライブラリのリンク中に、ld から次のエラーが発生しました。
このエラーの原因を知っている人はいますか? .cc ファイルはすべて-fPIC
フラグ付きでコンパイルされます。