私は単純なQtコンソールアプリケーション(dbusサービス)を作成しており、systemdを使用して起動する必要があります。Qtアプリケーションをsystemdから起動したときにライブラリを読み込めません
しかし、私はを実行するたびに(私はかなり確信しているアプリケーションがlibQt5Gui.so.5をロードするために失敗したことを示すmy_serv、それはアプリケーションの起動に失敗し、私はでログを持つ終わるjournalctl -xeを開始systemctlそれは)、この特定のライブラリとは関係ありません:私はこれを行うとき、一方のアプリケーションから
raspberrypi systemd[1]: Started my_serv.service.
raspberrypi MyService[2812]: /opt/services/MyService: error while loading shared libraries: libQt5Gui.so.5: cannot open shared object file: No such file or directory
raspberrypi systemd[1]: my_serv.service: main process exited, code=exited, status=127/n/a
raspberrypi systemd[1]: Unit my_serv.service entered failed state.
は(すなわち、それはDBUS上のオブジェクトを登録するには失敗したrootユーザーの下のコンソールから罰金起動し、私はそれがないと思います関連性):
すべてがバイナリで図書館へのリンクを罰金であると思われls -al /usr/local/qt5/lib/libQt5Gui.*
-rwxrwxrwx /usr/local/qt5/lib/libQt5Gui.la
-rwxrwxrwx /usr/local/qt5/lib/libQt5Gui.prl
lrwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so -> libQt5Gui.so.5.9.1
lrwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so.5 -> libQt5Gui.so.5.9.1
lrwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so.5.9 -> libQt5Gui.so.5.9.1
-rwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so.5.9.1
:0
Qtライブラリには、次のパスによって突き止めています。次のようにLDD出力は次のようになります。
ldd MyService
libQt5Gui.so.5 => /usr/local/qt5/lib/libQt5Gui.so.5 (0x76a92000)
libQt5DBus.so.5 => /usr/local/qt5/lib/libQt5DBus.so.5 (0x76a0d000)
libQt5Core.so.5 => /usr/local/qt5/lib/libQt5Core.so.5 (0x7654e000)
サービスファイルは、この(/etc/systemd/system/my_serv.service)のように見えるおそらくリンカディレクトリがコンテキストで知られていない
[Service]
ExecStart=/opt/services/MyService
User=root
init.dとiですが、systemdはユーザー/ローカルのライブラリとパスを認識していません。たとえば、起動時のinit.dは、/ bin、/ sbin/libフォルダについて知っていますが、/ usr/bin/usr/local/bin/usr/local/libなどについてはわかりません。 – Xplatforms
Qt libsを/ libフォルダにリンクするか、/ usr/libフォルダを先に試してみてください。サービスを開始する前にLD_LIBRARY_PATHを設定するか、この値を設定してbashスクリプトでバイナリを開始することもできます – Xplatforms