【蜗牛黑板报】替换源文件编译没有生成新的库文件so

2020-07-14  本文已影响0人  技术是神奇的

昨天调试一直遇到编译不生效的问题,明明编译了新文件,但是so的时间就是没有更新。

今天又找老同事请教了一下,也明白了其中的一些编译原理。

先说下,产生这个编译不生效问题的背景:

前天,其他同事在下午3:10分给了我三份不同的源文件让我编译三个同类型的so(每份源文件就差几个数字);其实在这之前,这个so我已经编译过,so生成时间在3:10之前。

所以我替换了第一份源文件时,系统对比对这份源文件的时间和我原本已有的so的时间戳,发现这份源文件时间新于原本已有的so,所以此时的确可以生成新so,一切安然无恙。但是,后面再替换时,发现so的时间戳总是不能更新,原因就是此时的so的生成时间戳已经新于后两份源文件(因为后两份源文件是3:10分提供,我直接拷贝过去的,源文件的时间戳还是3:10,但是此时so的时间戳已经新于3:10,比如此时so时间是3:15),所以系统此时认为so已经编译了,此时不会再编译了。

这就牵扯到编译的规则:编译的本质主要还是根据源文件生成目标文件,但是如果目标文件时间戳已经新于源文件,此时是不会重新编译的。

解决这个问题的方法也很简单:

方法一:打开一下源文件稍微修改一下,让源文件时间戳新于目标文件;

方法二:第二个方法就是把目标文件都删掉,包括中间的.o文件,注意只删.so文件是没有用的,因为.so文件还是根据.o文件来的,本质还是应该找到中间生成的.o文件,并删掉它,就解决了。

上一篇下一篇

猜你喜欢

热点阅读