【问题标题】:Get compilation info of an installed program获取已安装程序的编译信息
【发布时间】:2014-03-14 17:26:34
【问题描述】:

我需要获取有关用于构建已安装程序的 C 编译器的信息。我猜 rt 或 lib 可以报告这一点,但没有什么具体的。并不是说该程序将安装在/usr/... 或类似位置,因此无法访问构建目录以获取相关信息。

【问题讨论】:

    标签: c linux compilation cmake


    【解决方案1】:

    表现良好的程序应该理解 --version 参数。

    打包程序(即那些在 Debian 上使用 dpkg -iapt-get install.deb 软件包安装的程序等...)也知道它们的软件包版本和来源。

    您可以尝试在二进制可执行文件上使用strings。但是,此类元数据(关于用于构建程序的 C 编译器的版本)可能已被剥离(例如,通过 strip 命令)。

    如果您正在开发程序(即它的 C 源代码)并且可以更改它,您可以考虑添加类似

    timestamp.c: Makefile
          echo 'const char timestamp[]=' > $@
          date +'"built with $(shell $(CC) --version) on %c";' >> $@
    
    yourprogram: $(OBJECTS) timestamp.o
          $(LINK.c) $(LDFLAGS) $< -o $@ $(LDLIBES)
          $(RM) timestamp.c
    

    在你的Makefile 中(细节可能有误,但你明白了)

    【讨论】:

    • 它们都不起作用。我是该程序的开发人员之一,需要提取已安装程序的编译信息(这是一个shell脚本)。还有其他可能的解决方案吗?
    • @AnkeshAnand shell 脚本的编译信息?.. 或者这应该是什么意思?
    • 对不起,我搞砸了,忽略 shell 脚本部分。我想要二进制文件的编译信息。
    • 如果是shell脚本,则不需要任何编译器来运行或安装。
    • 不,这不是一个 shell 脚本,它们是一堆 C 文件,生成一个二进制文件。
    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多