Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从systemd启动Qt应用程序时无法加载库_Qt_Service_Raspberry Pi_Shared Libraries_Systemd - Fatal编程技术网

从systemd启动Qt应用程序时无法加载库

从systemd启动Qt应用程序时无法加载库,qt,service,raspberry-pi,shared-libraries,systemd,Qt,Service,Raspberry Pi,Shared Libraries,Systemd,我已经创建了一个简单的Qt控制台应用程序(dbus服务),需要使用systemd启动它 但是,每次执行systemctl start my_serv时,它都无法启动应用程序,最后我登录了journalctl-xe,这表明应用程序无法加载libQt5Gui.so.5(我很确定它与这个特定的库无关): 另一方面,当我从根用户下的控制台执行此操作时,应用程序启动良好(即,它无法在dbus上注册对象,但我认为这与此无关): Qt库通过以下路径定位: ls -al /usr/local/qt5/lib/l

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

但是,每次执行systemctl start my_serv时,它都无法启动应用程序,最后我登录了journalctl-xe,这表明应用程序无法加载libQt5Gui.so.5(我很确定它与这个特定的库无关):

另一方面,当我从根用户下的控制台执行此操作时,应用程序启动良好(即,它无法在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)


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

init.d和我认为systemd不知道用户/本地库和路径。例如,init.d在启动时知道/bin、/sbin/lib文件夹,但不知道也不想知道/usr/bin/usr/local/bin/usr/local/lib等。您可以尝试将Qt-libs链接到/lib文件夹,或者最好先尝试/usr/lib文件夹。您还可以尝试在启动服务之前设置LD_LIBRARY_PATH,或者在bash脚本中包装设置此值并启动二进制文件
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 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)
[Service]
ExecStart=/opt/services/MyService
User=root