应用启动时通过LD_LIBRARY_PATH修改依赖的动态库

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来启动,但后面觉得这样不太好看。
所以又翻了下Systemdsystemd.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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容