vlc-android-源码编译-修改依赖的live555源码文件

编译后的vlc-android, 有需要vlc依赖的第三方库live555中添加一些修改。 由于vlc依赖第三方库是自己指定下载特定版本并且最终将第三方库打包到一起,所以,应该去修改编译环境中的第三方源码包。
如果已经成功编译过源码,可以在 Android\vlc-android\vlc\contrib 目录下看到多个contrib-android-XXX文件夹,我编译使用 ./compile.sh -a arm64, 对应文件夹
contrib-android-aarch64-linux-android
在这里插入图片描述进入到其中就可以看到live555子目录,这里面就是依赖的live555源码, arm64.
这个时候进去修改,然后再执行./compile.sh -a arm64, 新修改的代码是没有被重新编译的。
解决办法:在contrib-android-aarch64-linux-android这个目录下
#ls -a | grep live555
可以看到一个 .live555文件,直接remove 它,这个文件没有内容,只是一个标记。
然后再到vlc-Android目录去执行 ./compile.sh -a arm64,新修改的代码就会被重新编译。

在这里插入图片描述
以下附上分析流程:
compile.sh脚本,再编译依赖关系是通过调用compile-libvlc.sh来实现的,可以grep关键字来找。再compile-libvlc.sh脚本中有这么一段:

make $MAKEFLAGS fetch
checkfail "contribs: make fetch failed"
# Make
make $MAKEFLAGS
checkfail "contribs: make failed"

这个脚本在执行make 命令,$MAKEFLAGS只是一个变量,make 命令的选项,checfail ,是这个shell脚本的一个函数,全局查找以下便知,这个函数的功能就是判断上一个shell命令是否成功执行,如果没有成功执行就输出 后面的 参数“ make fetch failed” fetch ,就是获取源码。 整个命令就是 执行
#make fetch
#make
那么对应的makfile文件在哪里呢?可以在命令的前头输出一下,比如

echo "$MAKEFLAGS"
pwd

执行该脚本就可以看到 MAKEFLAGS变量值,和脚本运行到此处的目录
pwd输出/work/Android/vlc-android/vlc/contrib/contrib-android-aarch64-linux-android,去这个目录可以看到这里面有makefile,那其中必然有fetch这个目标文件,并且执行默认make 目标,应该就是我么的编译 contrible操作了。
该makefile:

fetch: $(PKGS:%=.sum-%)
fetch-all: $(PKGS_ALL:%=.sum-%)
install: $(PKGS:%=.%)

添加点调试信息进去:

fetch: $(PKGS:%=.sum-%)
fetch-all: $(PKGS_ALL:%=.sum-%)
install: $(PKGS:%=.%)
 echo "wang test MAKEFILE"
 echo "$(PKGS)"
 echo "wang test MAKEFILE"

可以看到输出 $(PKGS) 变量, 是各种依赖的三方库,其中就有live555,而这个install 目标,可以找all目标,all目标在这里就死直接依赖install,这里的install的值,是把PKGS变量都加了一个前缀 “.” 所以现在要找 一个目标文件 .live555,这个makefile执行的时候肯定是有这个目标文件的,在本文件中直接查找找不到,可以找一下include关键字,会发现

#
# Per-package build rules
#
PKGS_FOUND :=
include $(SRC)/*/rules.mak

即 /vlc-android/vlc/contrib 目录下的src目录,其中给个子目录,内部有rules.mak,就是用来下载,解压,打补丁,生成各个源码文件夹的规则。
在src/live555/rules.mak文件中有

.live555: live555
 $(REQUIRE_GNUV3)
 cd $< && for subdir in $(SUBDIRS); do \
  echo "PREFIX = $(PREFIX)" >> $$subdir/Makefile.head && \
  echo "LIBDIR = $(PREFIX)/lib" >> $$subdir/Makefile.head ; done
 cd $< && echo "LIBDIR = $(PREFIX)/lib" >> Makefile.head && \
  echo "PREFIX = $(PREFIX)" >> Makefile.head
 cd $< && ./genMakefiles $(LIVE_TARGET)
 cd $< && for subdir in $(SUBDIRS); do $(MAKE) $(HOSTVARS) -C $$subdir; done
 cd $< && for subdir in $(SUBDIRS); do $(MAKE) $(HOSTVARS) -C $$subdir install; done
 cd $< && $(MAKE) install_shared_libraries
 touch $@

这里才是真正编译的命令所在,编译完成,最后 touch $@,即生成 .live555文件。
所以在complie-libvlc.sh中依赖 , .live555文件的存在,导致并不会重新编译。

发布了96 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u012459903/article/details/93722580
今日推荐