如何调试FreeBSD Linuxulator运行LBRY-Desktop缺失libffmpeg.so问题
问题根因
你遇到的报错核心是FreeBSD的Linux二进制兼容层的动态库搜索逻辑和chroot内部不一致:
- 在chroot环境内执行时,用的是Ubuntu自带的动态链接器,路径解析都以
/compat/ubuntu为根目录,所以可以正常找到/opt/LBRY下的libffmpeg.so - 直接在FreeBSD主机环境执行时,动态链接器的路径解析以FreeBSD的系统根为根,默认不会把
/compat/ubuntu/opt/LBRY加入搜索路径,所以找不到对应库,加载失败触发SIGTRAP异常终止。
解决方案
方法1:通过chroot方式启动(最简单)
直接在chroot环境内启动程序,同时配置好X11转发允许chroot内程序访问你的桌面:
# 先在FreeBSD主机执行允许本地用户访问X11 xhost +local: # 进入chroot启动程序 sudo chroot /compat/ubuntu /bin/bash -c "cd /opt/LBRY && ./lbry"
如果需要普通用户权限运行,可以指定用户:
sudo chroot --userspec=<你的用户名>:<你的用户组> /compat/ubuntu /bin/bash -c "cd /opt/LBRY && ./lbry"
方法2:在FreeBSD主机环境直接启动,手动指定动态库搜索路径
FreeBSD的Linux兼容层会读取LD_LIBRARY_PATH环境变量指定的Linux库路径,把lbry的程序目录加入该变量即可:
LD_LIBRARY_PATH=/compat/ubuntu/opt/LBRY /compat/ubuntu/opt/LBRY/lbry
如果启动还有其他依赖找不到,可以把chroot内的系统库路径也加进去:
LD_LIBRARY_PATH=/compat/ubuntu/opt/LBRY:/compat/ubuntu/lib/x86_64-linux-gnu:/compat/ubuntu/usr/lib/x86_64-linux-gnu /compat/ubuntu/opt/LBRY/lbry
方法3:永久配置Linux兼容层的动态库搜索路径
编辑/compat/ubuntu/etc/ld.so.conf文件,加入lbry的程序目录:
/opt/LBRY
然后在chroot内执行ldconfig更新缓存,之后再启动就不需要手动指定LD_LIBRARY_PATH了。
调试排查方法
如果上面的方法还有问题,可以用以下方式定位:
- 查看Linux兼容层下的动态库搜索结果:
# 用Linux的ldd来解析依赖,而不是FreeBSD自带的ldd /compat/ubuntu/usr/bin/ldd /compat/ubuntu/opt/LBRY/lbry | grep ffmpeg
- 查看动态链接器的搜索过程,确认路径解析问题:
LD_DEBUG=libs /compat/ubuntu/opt/LBRY/lbry
输出里会展示动态链接器搜索libffmpeg.so的所有路径,就能确认是否路径配置错误。
内容的提问来源于stack exchange,提问作者xliiv
相关产品推荐
相关产品推荐

