【问题标题】:Cannot load libraries when Qt application is launched from systemd从 systemd 启动 Qt 应用程序时无法加载库
【发布时间】:2018-02-14 18:21:10
【问题描述】:

我创建了一个简单的 Qt 控制台应用程序(dbus 服务),我需要使用 systemd 启动它。

但是,每次我执行 systemctl start 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.

另一方面,当我在 root 用户下从控制台执行此操作时,应用程序启动正常(即它无法在 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 等。
  • 您可以尝试将 Qt 库链接到 /lib 文件夹,或者最好先尝试 /usr/lib 文件夹。您还可以尝试在启动服务之前设置 LD_LIBRARY_PATH 或包装设置此值并在 bash 脚本中启动二进制文件

标签: qt service raspberry-pi shared-libraries systemd


【解决方案1】:

很可能链接器目录在systemctl 的上下文中是未知的。尝试在服务脚本开始时将环境变量 LD_LIBRARY_PATH 设置为相关目录;有关详细信息,请参阅man ld.so。或者查看系统上的其他服务脚本,了解环境是如何正确设置的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多