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

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

作者: 技术是神奇的 | 来源:发表于2020-07-14 23: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文件,并删掉它,就解决了。

相关文章

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

    昨天调试一直遇到编译不生效的问题,明明编译了新文件,但是so的时间就是没有更新。 今天又找老同事请教了一下,也明白...

  • C/C++编译模型

    C/C++是以源文件为单位进行编译的,每个源文件依次要经过预编译,编译,汇编,链接最终生成可执行文件或者库文件。 ...

  • Linux C 编程基础

    1、gcc编译过程 基本命令: 2、编译文件 3、静态链接库 (1) 首先用-c编译各个单源文件.c生成.o文件 ...

  • Android应用包的生成/管理/访问

    APK编译 APK项目的源文件包括: 资源文件 aidl源文件 Java源文件 Java静态库 Java共享库 所...

  • ndk编译生成so

    ndk-build编译生成so库 本文讲述使用Android 的ndk-build来编译生成so库,在命令行中编译...

  • android serialport_api 串口开发

    1.网上都能找到serialport_api 的so库和源文件还有java 文件。直接导入so 库,so库的源文...

  • 连接器 -- Scatter File & Linker

    @(嵌入式) [TOC] 源文件编译后生成 elf 格式的目标文件(各种.o), 与运行时库经过连接器处理后,生成...

  • 使用命令行执行Java程序

    确认运行环境 准备源文件生成文件: 编辑源文件内容 编译.class文件 运行.class文件

  • iOS 应用的构建过程

    一、应用构建过程 1.编译源文件:使用Clang编译项目中所有参与编译的源文件,生成目标文件。2.链接目标文件:将...

  • C语言生成可执行文件的编译过程

    C语言源文件要经过编译、链接才能生成可执行程序: 1、 编译(Compile)会将源文件(.c文件)转换为目标文件...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/dwtzcktx.html