【问题标题】:Detect when linking a binary has finished by looking at just the executable?通过仅查看可执行文件来检测链接二进制文件何时完成?
【发布时间】:2023-01-10 01:58:14
【问题描述】:

我们的项目编写语言的构建工具会并行编译和链接,用于许多不同的二进制文件等。在 CI 中,我们有一个单独的线程来查找这些已编译的二进制文件,因为它们可用并启动其他进程。

问题是似乎仅仅等待文件存在并变成chmod a+x 是不够的,有时我们最终会上传损坏的二进制文件。

有什么方法可以仅通过查看文件来确定链接是否已完成?这可以特定于 x86-64,甚至仅特定于 gold 或 lld。

(我的备用解决方案是在我们使用的链接器周围创建一个垫片,它可以在实际完成时以某种方式发出信号)

【问题讨论】:

    标签: compilation linker x86-64 lld gold-linker


    【解决方案1】:

    当链接器输出文件打开时,链接器尚未完成。我将使用的方法是检查输出文件是否打开。

    Is there a way to check if a file is in use?

    另请参阅这篇关于检查文件的答案的帖子是否由另一个进程打开,该进程讨论了问题Determine if file is in the process of being written upon?

    【讨论】:

    • 哦,那真的很明显,不是吗哈哈。谢谢!
    • @jberryman 对自己好一点。有时你只需要问鸭子,如果每次我问如何做一些有“明显”解决方案的事情时我都能得到一美元,我就会变得富有。
    【解决方案2】:

    至少对于 gold,如果您要求它生成一个映射文件 (-Map filename),则在写入并关闭输出文件后生成映射文件。如果等待创建映射文件,则可以确定输出文件是完整的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 2017-09-24
      相关资源
      最近更新 更多