export引发的血案,ldd not found问题分析

今天在一台服务器编译程序时的时候报错,

[huaizhi@localhost ~]gcc test.c -o test

/usr/local/libexec/gcc/x86_64-linux-gnu/4.7.1/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory


进一步的分析发现,这个so确实无法链接,not found

[huaizhi@localhost ~]$ ldd /usr/local/libexec/gcc/x86_64-linux-gnu/4.7.1/cc1
        linux-vdso.so.1 =>  (0x00007fff319ff000)
        libmpc.so.3 => not found
        libmpfr.so.4 => not found
        libgmp.so.10 => not found

        libdl.so.2 => /lib64/libdl.so.2 (0x0000003279000000)
        libz.so.1 => /lib64/libz.so.1 (0x0000003279c00000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003279400000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003278c00000)


用ldconfig确认在ld Cache中不存在这个so:

[huaizhi@localhost ~]$ ldconfig  -p|grep libmpc


但是实际上这个so在文件系统中是存在的

[huaizhi@localhost ~]$ locate -r libmpc.so
/usr/local/lib/libmpc.so
/usr/local/lib/libmpc.so.3
/usr/local/lib/libmpc.so.3.0.0


那么有两个方法可以解决这个问题:

方法1:在/etc//etc/ld.so.conf增加动态库路径,并且调用ldconfig更新ld Cache

include ld.so.conf.d/*.conf
/usr/local/lib             #注意此处的格式!!!

在ldconfig生效后,通过ldconfig -p能够找到需要cc1需要动态库,此时gcc可以编译过


方法2:通过$LD_LIBRARY_PATH 增加动态库搜索路径,我在.bash_profile中发现$LD_LIBRARY_PATH 已经添加了路径/usr/local/lib/

[huaizhi@localhost ~]$ echo $LD_LIBRARY_PATH 
/usr/local/lib64:/usr/local/lib:/home/huaizhi/lib:/

那是什么原因呢?


最终发现是由于这个环境变量$LD_LIBRARY_PATH 没有export导致的(可以通过命令 export|grep LD_LIBRARY_PATH来确认一下)

这将导致shell调用gcc的时候无法传递这个环境变量,gcc在调用cc1的时候也就无法完成cc1的动态库链接动作

因此.bash_profile中需要修改为

PATH=$HOME/usr/local/bin:$PATH:$HOME/bin
LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$HOME/lib:/$LD_LIBRARY_PATH

export PATH
export LD_LIBRARY_PATH

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ldd not found是一个常见的错误信息,表示在执行程序时找不到所需的共享库。这个问题通常发生在默认库搜索路径下找不到所需的库的情况下。解决该问题的一种方法是通过设置LD_LIBRARY_PATH环境变量来指定共享库的路径。执行命令"export LD_LIBRARY_PATH=..."来设置路径,将"..."替换为实际的库路径。 另外,也有可能出现错误日志中的"cmake error while loading shared libraries No such file or directory"信息。这个错误表示在使用CMake编译生成动态库时,找不到所依赖的第三方动态库。解决该问题的方法是使用RPATH来指定动态库的路径。RPATH是一种链接时的选项,可以在可执行文件或动态库中嵌入运行时所需的库的路径信息。通过使用RPATH,可以确保在执行程序时正确地找到依赖的动态库。具体的解决方法可以参考相关的文档和资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux C编程问题ldd 提示not found](https://blog.csdn.net/guangyacyb/article/details/85116560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [错误日志:cmake error while loading shared libraries No such file or directory | ldd =>not found](https://blog.csdn.net/qq_28087491/article/details/128665295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值