【问题标题】:Do distributed compilers need dependencies when compiling something?分布式编译器在编译某些东西时是否需要依赖项?
【发布时间】:2016-06-15 08:23:51
【问题描述】:

考虑到分布式编译器,例如 incredibuild 或 distcc,假设我将编译作业发送到远程机器以编译依赖于静态或动态库的 C++ 源文件(我需要安装它才能构建我的程序)。远程机器是否需要该库才能编译它?

根据我对 C 和 C++ 的理解,当一个源文件被编译成一个目标文件时,编译器会“存根”掉源代码之外的任何东西(例如对不在代码中的函数的调用,即仅定义为标题的一部分)。当链接发生时,即需要存在依赖关系,以便链接器可以检查它们以确定函数的实现位置。如果是这种情况,这是否意味着分布式编译器只有在安装了依赖项的情况下才能进行编译+链接?动态库和静态库是否同样适用?

【问题讨论】:

    标签: compilation linker distributed


    【解决方案1】:

    构建顺序确实是任何成功编译过程的核心 :) 分布式构建必须获得相同的构建顺序,同时以更加并行的方式执行构建。 当您使用 IncrediBUild 执行构建时,启动构建的机器正在管理构建过程,并确保无论哪台机器实际执行构建,每个分布式编译任务都将以正确的构建顺序构建。当编译任务发送到远程机器时,它会与启动构建的机器的基本环境设置一起发送。我们称之为“进程虚拟化”。 如果在该远程进程的编译过程中,需要某个文件(如您所描述的场景中),IncrediBuild 可以从开始构建的计算机中获取它并将其放置在远程计算机的缓存中。此文件将用于此编译任务,并将保存在远程机器的缓存中以备将来使用。 由于这种机制,远程机器根本不需要任何源文件。它们基本上可以是普通的 Windows 机器——没有任何开发环境。 希望我能够对这个问题有所了解。

    【讨论】:

    • 有点,是的 :) 但我的问题更具体到编译与链接的要求。将源代码编译为目标文件的过程是否需要库?还是仅在链接时才需要?
    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 2014-05-31
    • 1970-01-01
    • 2023-04-04
    • 2010-12-04
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    相关资源
    最近更新 更多