应用启动时通过LD_LIBRARY_PATH修改依赖的动态库
2022-10-18 本文已影响0人
苍蝇的梦
2022-10-11 遇到的一点小问题
最近在ArchLinux上运行某个程序,遇到了错误提示。
[root@wannoo bin]# wannoo
wannoo: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by wannoo)
之前遇到这种,都是直接执行pacman -S gcc-libs
,更新gcc-libs。但这次担心影响其他应用,所以不能升级。
周围问了下,同事给了个LD_LIBRARY_PATH
链接,让试试。
命令export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/wannoo/lib
是修改的全局的环境,不合适。
改了下命令,可以了,而且只针对这次命令。
[root@wannoo bin]# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/wannoo/lib wannoo
正常运行
不过这个程序是使用的systemctl start wannoo
来启动的。wannoo.service文件的ExecStart=
没办法直接设置环境变量,原本是打算通过/bin/sh xxx.sh
来启动,但后面觉得这样不太好看。
所以又翻了下Systemd
和systemd.exec
,发现可以通过设置EnvironmentFile=-/mnt/wannoo.conf
来配置程序的环境变量。
文件:wannoo.service
[Unit]
Description=Network Audio Adapter daemon
Requires=network-online.target sound.target systemd-udev-settle.service
After=network-online.target sound.target systemd-udev-settle.service
[Service]
Type=simple
ExecStart=/mnt/test/bin/wannoo
Restart=always
RestartSec=1
EnvironmentFile=-/mnt/test/wannoo.conf
Nice=-10
IOSchedulingClass=realtime
LimitMEMLOCK=1G
LimitNICE=-10
LimitRTPRIO=98
[Install]
WantedBy=multi-user.target
文件:/mnt/test/wannoo.conf
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/wannoo/lib