项目场景:
移植ffmpeg到linux开发板中碰到的问题。
问题描述
目标开发板是oka40i-c,运行linux。将ffmpeg通过filezilla软件利用FTP协议进行文件的传输,执行ffmpeg发现缺少动态库。
原因分析:
上网查询他人文章,原因是通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下。找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如果不在,那么就会提示找不到动态库。有三种解决方式:
一是修改LD_LIBRARY_PATH环境变量,这种方法主要处理临时的动态库加载,LD_LIBRARY_PATH环境变量修改后,只能是对当前的用户生效。
-
LD_LIBRARY_PATH的作用:这个环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。
-
具体步骤:
-
1、找到动态库所在路径:sudo find / -name “[动态库名字]”
-
2、打开~/.bashrc文件
-
3、在该文件最后一趟添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[动态库所在的绝对路径]
-
4、source ~/.bashrc
二是修改/etc/ld.so.conf配置文件, 特点:对所有用户生效。不是每个操作系统都有这个配置文件,就Ubuntu系统有。 -
/etc/ld.so.conf的作用:记录了程序加载运行期间查找动态链接库时的路径。
-
具体步骤:
-
1、找到动态库所在路径:sudo find / -name “[动态库名字]”
-
2、打开/etc/ld.so.conf文件:sudo vi /etc/ld.so.conf
-
3、在最后一行添加动态库的绝对路径
-
4、重新加载/etc/ld.so.conf文件:sudo ldconfig -v
三是创建动态库的软连接 -
特点:让所有用户生效;并且通用,只要是Linux类型的操作系统,都会去/usr/lib目录下去找动态库。
-
具体步骤:
-
1、找到动态库所在路径:sudo find / -name “[动态库名字]”
-
2、创建动态库软连接:ln -s [动态库] [待创建的软链接]
-
注意:
-
1、创建软连接的时候要用绝对路径,如果用相对路径,会导致只在当前路径有效,其他路径这个软连接就找不到了。
-
2、不建议用cp的方式代替ln -s的方式。原因:当动态库升级的时候,有可能导致动态库版本不一致,还是链接的旧版本。
解决方案:
这里选用环境变量的方法,
首先查询库所在的目录,find / -name “libx264.so.161”
然后在/etc/profile文件中按照格式添加环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/extp/x264/lib
考虑到开发板没有source命令,选用reboot重启系统
水平有限,敬请指点