【BUG】【RISC-V】【交叉编译】【链接】error while loading shared libraries: libstdc++.so.6

【背景】

在linux上做RISC-V的交叉编译,使用的交叉编译工具链:riscv64-linux-gnu

但是make完成后,得到的可执行文件无法运行,提示缺乏库文件。

但是我的lib路径下是存在libstdc++.so.6这个文件的。

【BUG描述】

lib/cpp_deploy_pack: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

【解决】

尝试1(失败):下载32位库文件

直接搜索,大部分网上的答案都会让你下载32位或者其它版本的libstdc++.so.6库,但是并没有起到作用。

尝试2(成功):

报错原因:

  • make的时候:使用了交叉编译工具riscv64-linux-gnu,则我们的.cpp文件链接的标准库是riscv64-linux-gnu提供的libstdc++.so.6,而不是系统默认的标准库;
  • 运行的时候:可执行文件默认链接到系统的libstdc++.so.6,因此出现错误。

方法1: 

要让可执行文件能搜索到交叉编译器提供的libc++.so.6,

可以直接把交叉编译器的libc++.so放到系统的lib文件夹下面,就可以自动检测:

sudo cp /usr/riscv64-linux-gnu/lib/* /lib/

这是从网上看到的策略,这样做会覆盖系统的文件,个人不太推荐这样做。

方法2:

  • 在当前终端指定交叉编译器的libstdc++.so路径,这样动态链接时可以被检测到:

(仅当前终端有效)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/riscv64-linux-gnu/lib

  • 也可以在bash里面一劳永逸地更改:

gedit ~/.bashrc

在文件最后一行添加:(xxx 为动态库文件的绝对存储路径)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxx

然后重启终端:

source ~/.bashrc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值