在sudo中加载共享库时的错误

error while loading shared libraries in sudo

本文关键字:错误 共享 sudo 加载      更新时间:2023-10-16

我在https://github.com/openyou/libomron/blob/master/master/readme.asciidoc 上阅读了文档

执行:

cd /
sudo find . | grep libomron.so.0.9.0

结果:

./home/splincode/Develop/omron/c++_modules/libomron/omron-build/lib/

okey,我在全球路径中添加库

LD_LIBRARY_PATH=/usr/local/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/splincode/Develop/omron/c++_modules/libomron/omron-build/lib/
export LD_LIBRARY_PATH

然后是工作:

 cd ~/Develop/omron/usr/local/bin/
 ./omron_790IT_test

但是,不访问硬件,结果

 Found 1 omron 790ITs
 Cannot open omron 790IT!

结果,我开始以管理员的身份运行,但他看不到图书馆,该怎么办?

sudo ./omron_790IT_test

结果:

 ./omron_790IT_test: error while loading shared libraries: libomron.so.0.9.0: cannot open shared object file: No such file or directory

./omron_790IT_test: error while loading shared libraries

这是因为默认情况下的sudo dik 而不是传播环境变量;这样做有安全风险。

您可以通过以下三种方式之一处理:

  1. 不要求设置LD_LIBRARY_PATH的方式链接您的程序(这是最好的方法)。

    在您的情况下,链接命令应该看起来像这样:

    gcc -o omron_790IT_test ... -Wl,-rpath=/home/splincode/Develop/omron/c++_modules/libomron/omron-build/lib

  2. 在sudo进程中明确设置通缉的环境变量:

    sudo env LD_LIBRARY_PATH=... ./omron_790IT_test

  3. 要求sudo将所有环境变量传播到根过程中:

    sudo -E ./omron_790IT_test

    sudo --preserve-env ./omron_790IT_test