1
我創建了一個簡單的Qt控制檯應用程序(dbus服務),我需要使用systemd啓動它。當從systemd啓動Qt應用程序時無法加載庫
不過我每次執行時間systemctl啓動my_serv它未能啓動應用程序,我最終不得不日誌中journalctl -xe表明應用程序加載失敗libQt5Gui.so.5(我敢肯定它沒有與此相關的特定庫):
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的對象,但我認爲這是不相關):
./MyService
WELCOME FROM MY SERVICE
Object was registered on dbus
Service was not registered on dbus
Qt庫是由所處以下路徑:
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
似乎一切正常鏈接到二進制庫。該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和我雖然systemd不知道用戶/本地庫和路徑。例如,啓動時的init.d知道/ bin,/ sbin/lib文件夾,但不知道/不會知道/ usr/bin/usr/local/bin/usr/local/lib等。 – Xplatforms
您可以嘗試要將Qt庫鏈接到/ lib文件夾中,或者最好先嚐試/ usr/lib文件夾。您也可以嘗試在啓動服務之前設置LD_LIBRARY_PATH,或者設置此值並在bash腳本中啓動二進制文件 – Xplatforms