ARMデバイスのlibsystemd.soはどこにありますか?

ARMデバイスのlibsystemd.soはどこにありますか?

私はDebian 9.8(Stretch)を実行するARM Tinkerboardを持っています。システムバージョンは232です。私はユーザースペースやデーモンとして実行できるプログラムを開発しています。デーモンとして実行していて、Systemdを見つけるために使用されているdlopen場合dlsymsd_notify(3)エントリポイント。

~によるとsd_notify(3)マニュアルページ:

これらのAPIは共有ライブラリとして実装され、libsystemd pkg-config(1)ファイルを使用してコンパイルおよびリンクできます。

残念ながら見つかりませんlibsystemd.so。これはサービス負荷をシミュレートするユーザーゾーンテストです。

$ LD_PRELOAD=/lib/libsystemd.so NOTIFY_SOCKET=-1 ./myprog.exe
ERROR: ld.so: object '/lib/libsystemd.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

標準位置にないようです。

$ find /lib -name libsystemd.so
$ find /usr -name libsystemd.so
$

実際:

$ sudo find / -name libsystemd.so
$

共有ライブラリはどこにありますか?

答え1

libsystemd.soこれはパッケージが提供するシンボリックリンクであり、libsystemd-devライブラリを使用するプログラムを構築する場合にのみ便利です。そのターゲットは、ライブラリを使用するプログラムを実行するために必要なものを提供するlibsystemd.so.0パッケージによって提供されます。 PCにはありますが、Armデバイスには見つからない場合は、PCには開発環境がインストールされていますが、Armデバイスにはないためですlibsystemd0libsystemd.so

ほとんどの図書館はそうです。プログラムが使用するライブラリファイルにはバージョン番号が含まれています。これにより、システムは互換性のない複数のバージョンのライブラリを持つことができます。各バージョンは番号で識別され、独自のファイルです。 Debian パッケージ名にはライブラリのバージョン番号も含まれます。ライブラリ用の開発ファイル(ヘッダーと静的ライブラリ)がある場合は、ビルドするプログラムが使用するライブラリのバージョンへのシンボリックリンクがあります。libfoo.so.VERSIONlibfooVERSIONlibfoo.alibfoo.so

だから実行してくださいfind /lib /usr/lib -name libsystemd.so.0
または、lddライブラリに動的にリンクされた実行可能ファイル(実行時にロードするのではなくdlopen)に対して実行しますldd /usr/bin/dbus-daemon。例: 。
または、インストールされているパッケージ検索を使用してくださいdpkg -S libsystemd.so.0
または、利用可能なパッケージを検索しますapt-file search libsystemd.so.0apt-file設定されていると仮定)。
またはオンラインで確認してください

LD_PRELOAD=/lib/arm-linux-gnueabihf/libsystemd.so.0 …

関連情報