Android marshmallow(snapdragon 650 [64bit])でDebianをrootとして指定しました。
chrooted debianにiceweaselをインストールしました。ただし、次のエラーが表示されます。
(firefox:16210): Gdk-WARNING **: shmget failed: error 38 (Function not implemented) Segmentation fault
だからコンパイルしてみましょう。libandroid-shmem.soしたがって、買戻契約android-ndkを使用して、armv8-aフォルダから/lib
chrooted debianディレクトリにコピーします。それから尋ねますliblog.so
。
iceweasel: error while loading shared libraries: liblog.so: cannot open shared object file: No such file or directory
だから私はandroid-ndkからchrooted debianディレクトリliblog.so
にコピーしました。/lib
今私が走るときenv LD_PRELOAD="/lib/libandroid-shmem.so" iceweasel
。次のエラーが表示されます。
iceweasel: error while loading shared libraries: /usr/lib/aarch64-linux-gnu/libc.so: invalid ELF header
以下はいくつかの詳細です:
file /lib/libandroid-shmem.so
/lib/libandroid-shmem.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5ad4582c76effbe27a6688369ad979fea5dfac2a, stripped
$ cat /usr/lib/aarch64-linux-gnu/libc.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-littleaarch64)
GROUP ( /lib/aarch64-linux-gnu/libc.so.6 /usr/lib/aarch64-linux-gnu/libc_nonshared.a AS_NEEDED ( /lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 ) )
答え1
どうやってコンパイルしましたか?コンパイルしましたが、悪いelfエラーは発生しませんでした。 libandroid-shmemをコンパイルするためにとった手順は次のとおりです。
chrootと入力してください
このリポジトリの複製
git clone https://github.com/pelya/android-shmem
- サブモジュールのインポート
git submodule update --init libancillary
- aarch64またはarm64用にコンパイルするにはbuild.shスクリプトをいくつか変更する必要があるため、リポジトリを複製して
cd android-shmem
build.shを削除してから、使用しているテキストエディタを使用して新しいファイルを作成します。肉ここvi build.sh
これをコピーしてbuild.shに貼り付けて保存します。
#!/bin/sh gcc -shared -fpic -std=gnu99 -Wall *.c -I . -I libancillary \ -o libandroid-shmem.so -Wl,--version-script=exports.txt -lc -lpthread && \ strip libandroid-shmem.so
ビルドスクリプトを実行する
./build.sh
と、現在のディレクトリでコンパイルされたバイナリが表示されます。- 今エクスポート
export LD_PRELOAD=/path/to/your/binary
答え2
問題は、android-ndkを使用してライブラリをコンパイルしたようです。これにより、Androidバージョンに接続できますlibc.so
。
一部のLinuxディストリビューションでは、libc.so
実際のライブラリではなくリンカスクリプトのように見え、android-ndkは明らかにこれがライブラリであると予想しています。
ただし、libc.soを実際のライブラリへのシンボリックリンクに置き換えても、コンパイルされたlibandroid-shmem.soはlibcバージョンの不一致について不平を言うので、まだ機能しません。 (私は持っています/lib/aarch64-linux-gnu/libc.so.6: version `LIBC' not found (required by /data/data/com.termux/files/usr/lib/libandroid-shmem.so)
)
代わりに説明されているように、chroot環境でライブラリを直接コンパイルします。アシスタントS回答。注:スクリプトを変更する必要はありませんでしたbuild.sh
。アップストリームで提供されるスクリプトはうまく動作します。