【发布时间】:2019-07-22 16:40:29
【问题描述】:
我有一个运行 Ubuntu 16.4 LTS 的 docker 实例。我正在做 C++ 构建并使用 ar/ranlib 来生成我的 .a 文件。这会丢失文件修改时间。
这是我管理存档文件的 Makefile 规则:
${LIB}: ${LIB_OBJ}
ar -cvr ${LIB} ${LIB_OBJ}
ranlib ${LIB}
之后还有一点输出:
^ ar tv libmylib.a
rw-r--r-- 0/0 129000 Jan 1 00:00 1970 XMLStringWriter.o
rw-r--r-- 0/0 99664 Jan 1 00:00 1970 FileUtilities.o
...
^ ar --version
GNU ar (GNU Binutils for Ubuntu) 2.26.1
^ ranlib --version
GNU ranlib (GNU Binutils for Ubuntu) 2.26.1
系统时间正确,.o 文件有正确的更新时间。此外,我为在 Mac 上运行执行相同的构建,生成的 libmylib-mac.a 具有正确的更新时间,具有完全相同的 Makefile,只是不同的 LIB 目标。
这不会造成任何实际问题,但很烦人。我没有看到用于 ar 命令的选项,并且网络搜索没有找到明显的讨论。
解决方案?
另外,我是否应该取消 ranlib 命令并添加 -s(小写 s)选项来强制构建符号表?
【问题讨论】:
-
您的文件系统是否安装了“noatime”或“relatime”选项,而
ar正在使用atime?只是在黑暗中的疯狂猜测.. -
@JesperJuhl 我会考虑 ar 命令的这种可怕行为。我做了 ls -l --time=atime,时间似乎很合理。
-
正如我所说,这只是一个猜测。在黑暗中开枪????
-
@JesperJuhl 值得一试。谢谢。