请教:普通用户可执行,sudo 执行却报错error while loading shared libraries

cs十七 2017-12-14 09:34:31
编写的程序 ./SerialFlowTest
在普通用户下可以运行,但是因为要open串口,所以使用 sudo ./SerialFlowTest,结果此时会报错。
error while loading shared libraries: libcJSON.so.1: cannot open shared object file: No such file or directory
1.1程序使用QtCreator生成


1.2.程序目录如下:


2.在普通用户下可以执行


3.使用sudo却报错。


4.找资料时找到这个网页,
4.1 使用在sudo gedit /etc/ld.so.conf 文件中加入这个目录,就成功了。
4.2 但是 使用 export 的方式却不成功,修改 .bashrc的方式也不成功。


5.问题,请教一下:
5.1 既然在普通用户下可以执行,那为什么 sudo却不能执行,是有什么原理吗?
5.2 理解,既然链接库 与 执行程序都在同一个目录下,那应该能够正常执行才对啊?
5.3奇怪为什么 4.1可以成功,4.2却不能成功?
5.4奇怪,为什么另一个库libcomlib却不会报这个错误呢??


6.问题排查
6.1使用 ldd 命令查看程序涉及的链接库。普通用户下能够找到,使用sudo却找不到,为什么??

-------
我的积分好少啊,得赚啊
...全文
1860 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasonM2008 2017-12-18
  • 打赏
  • 举报
回复
解决了,就来那份咯。。。。
cs十七 2017-12-17
  • 打赏
  • 举报
回复
小结: 3.应该还有一些东西需要了解的, 2.在普通用户下,设置了 export LD_LIBRARY_PATH=共享库的目录都可以执行后在普通用户下执行,对 sudo ./xxx 不行。在root用户下设置此变量后,在root用户下执行。 1.应用程序中使用共享库的方法,可以参考: (1)Shared libraries with GCC on Linux - Cprogramming.com https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html (2)GNU Scientific Library – Reference Manual: Shared Libraries http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html
cs十七 2017-12-17
  • 打赏
  • 举报
回复
引用 4 楼 zhxianbin 的回复:
不同用户环境变量是不同的 ,分别看一下 $LD_LIBRARY_PATH
嗯,这个明白。 测试过了,不管普通用户或者root用户,只要设置了export LD_LIBRARY_PATH=共享库的目录都可以执行。
zhxianbin 2017-12-15
  • 打赏
  • 举报
回复
不同用户环境变量是不同的 ,分别看一下 $LD_LIBRARY_PATH
cs十七 2017-12-15
  • 打赏
  • 举报
回复
引用 2 楼 r_Jimy 的回复:
你不要sudo ./xxx执行 sudo su为root后,再执行看看 是不是你哪里有export LD_LIBRARY_PATH了呢
谢! 嗯,是的。 $su root $export LD_LIBRARY_PATH=共享库的目录 $./ProgName 之后可以正常执行了。
常书 2017-12-15
  • 打赏
  • 举报
回复
你不要sudo ./xxx执行 sudo su为root后,再执行看看 是不是你哪里有export LD_LIBRARY_PATH了呢
cs十七 2017-12-15
  • 打赏
  • 举报
回复
好像知道怎么解决了。 1. 普通用户下的 终端中 export LD_LIBRARY_PATH 在sudo执行时是没有的 man sudo ### sudo, sudoedit — execute a command as another user 那实际上 sudo ./ProgName 执行时候是以另一个用户身份执行。 如果只是在当前普通用户下的 终端中 执行 export LD_LIBRARY_PATH=共享库的位置,只是在当前用户下有了 $LD_LIBRARY_PATH这个变量,但是使用sudo的时候,是没有这个变量的。 资料参考: linux使用gcc编译c语言共享库步骤 http://www.jb51.net/article/46005.htm 问题:但是也还是有疑问 1.为什么 直接普通用户时候 执行 ./ProgName可以执行,而且不需要 设置其他环境变量, 这里是有什么原因吗?

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧