web-dev-qa-db-ja.com

.soファイル内のリンカースクリプト? (libc.so)そうですか?

私は現在、pythonを実行するためにNASこれはZyxel NSA325です。

私はどうにかしてpython 2.7とpipを実行して、pipでウォッチドッグモジュールを正常にインストールすることができました。私は これらの手順 を取得してpythonおよびbtwを実行するpip。

ウォッチドッグモジュールを使用するpythonスクリプトを実行すると、難しいエラーが発生します。

/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file

ELFファイルのヘッダーがどのように表示されることになっているのかをグーグルで検索しました どうやら7f 45 4c 46で始まり、.ELFに変換されます。だから私は簡単にcat /ffp/lib/libc.soを行い、結果は:

/* GNU ld script
 * Use the shared library, but some functions are only in
 * the static library, so try that secondarily. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
         "elf32-littlearm")
GROUP ( libc.so.0 uclibc_nonshared.a AS_NEEDED ( ld-uClibc.so.0 ) )

明らかにこれはELFファイルではありません。それで、私は調査にもう少し時間を費やし、それは linker script だと思います。

しかし今、私はアイデアがありません。 .soファイルにリンカースクリプトがあるのはなぜですか?そうですか?どうすれば修正できますか?

システム情報:

# uname -a
Linux NSA325-v2 2.6.31.8 #2 Fri Jun 23 11:03:47 CST 2017 armv5tel GNU/Linux
8
Forivin

.soという名前のファイルは、必ずしも共有ライブラリであるとは限りません。これらのファイルは、実行時ではなくビルド時にプログラムをリンクするときに使用されます。これらは通常、実際の共有ライブラリへのシンボリックリンクですが、少なくともGNU ldを使用するシステムでは、リンカースクリプトにすることもできます。これは完全に問題ありません。最新のglibcベースのシステムでは、libc.soもリンカースクリプトであることがわかります。

Python(またはウォッチドッグモジュール)がlibc.soではなくlibc.so.0を探している理由は説明されていません...これは、=の設定ミスである可能性がありますPythonインタプリタか、またはウォッチドッグモジュールの無効な仮定です。後者は本日後半に説明します。前者の場合は、リンクしたフォーラムで質問することをお勧めしますあなたの質問に。

10
Stephen Kitt