英语法语西班牙语

Ad


OnWorks 网站图标

include_server - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 include_server

这是命令 include_server 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


include_server.py - C/C++ 包含依赖项的保守近似值

概要


包括服务器 - 港口 INCLUDE_SERVER_PORT [选项]

商品描述


include_server.py 启动一个包含服务器进程。 这个过程回答来自
分区(1) 客户关于在 C/C++ 编译中包含哪些文件。 include_server.py
一旦包含服务器产生,命令本身就会终止。

INCLUDE_SERVER_PORT 参数是用于所有通信的套接字的名称
在 distcc 客户端和包含服务器之间。 这 distcc-泵(1)指挥负责
用于创建套接字位置,将其传递给此脚本,并将其传递给所有
distcc 客户端通过名为 INCLUDE_SERVER_PORT 的环境变量。

包含服务器使用的协议使用了 distcc 的 RPC 实现。 每个分区
请求由(1)当前目录和(2)参数列表组成
编译命令。

如果包含服务器能够处理请求,则它通过以下方式回答 distcc 客户端
发送文件路径列表。 文件路径是压缩源和头文件的路径
通过包含分析发现编译所必需的文件。 名单还
包括符号链接,甚至编译服务器所需的虚拟文件
构建编译所需文件系统部分的准确副本。 在
这样,像 /path/foo.h 这样需要的头文件被压缩、重命名并存储在一个
临时位置,例如 /dev/shm/tmpiAvfGv.include_server-9368-1/path/foo.h.lzo。 这
distcc 客户端将这些文件传递到编译服务器,在那里它们将被
未压缩并临时安装。

如果包含服务器无法处理请求,则返回空列表
到 distcc 客户端。

有两种与包含服务器相关的故障。 包含服务器可能
无法计算包含或以其他方式失败,请参阅部分 包括 服务器 症状.
另外,remove server 上的编译可能会因为计算的不充分而失败
包括关闭,但在本地重试时成功,请参阅部分 区域中心 差异
症状.

OPTION 概要


include_server.py 理解以下选项。

-dPAT, --debug_pattern=PAT
用于打开警告和调试的位向量
1 = 警告
2 = 跟踪一些函数
XNUMX 的其他幂:参见 include_server/basics.py。

-e, - 电子邮件
将电子邮件发送到“distcc-pump-errors”或环境变量的值(如果已定义)
DISTCC_EMAILLOG_WHOM_TO_BLAME,当包含服务器出现问题时。 默认是
不发送电子邮件。

--电子邮件绑定 NUMBER
要发送的最大电子邮件数(除了最终电子邮件)。 默认值:3。

--无电子邮件
不要发送电子邮件。 这是默认设置。

--path_observation_re=RE
每当文件名解析为匹配的真实路径时发出警告消息
通过 RE,这是 Python 语法中的正则表达式。 这对于查找很有用
找出包含的文件的实际来源。 使用 RE="" 找到所有这些。 笔记:
必须至少使用 -d1 启用警告。

--pid_文件 文件路径
包含服务器的 pid 写入文件 FILEPATH。 这允许脚本
这样的 distcc-泵 拆除包含服务器。

-是的, - 统计数据
将有关包含分析的信息打印到标准输出。

--stat_reset_triggers=列表
当 LIST 中任何文件路径的时间戳更改或
文件路径出现或消失。 LIST 是冒号分隔的字符串
文件路径,可能包含简单的 glob(Python 的 glob 模块允许)。
每当发生此类更改时都会打印警告(如果启用了警告)。 这个
选项允许对 distcc-pump 的正常假设进行有限的例外,即来源
在构建期间不会修改文件。

-t, - 时间
将已用时间、用户时间和系统时间打印到 stderr。

--unsafe_absolute_includes
即使包含绝对文件路径,也要在编译服务器上进行预处理
遇到。 通常,包含服务器将依靠本地预处理
如果它检测到任何绝对包含。 因此,此标志可用于防止此类
当绝对包含是误报时的回退,要么是因为绝对包含
include 在预处理期间被丢弃或因为绝对包含的文件
存在于编译服务器上。

更准确地说,使用 --unsafe_absolute_includes 绝对包含被忽略
收集的目的包括关闭。 使用此选项可能会导致
结果不正确,因为 (1) 标题实际上可能包含在
编译服务器和它可能与客户端不同,(2)包含
不进一步分析标头的指令。

该选项对于编译具有此类硬编码绝对位置的代码很有用
条件指令(例如“#ifdef”)中的头文件
包括无关。 更准确地说,这些包含必须在
实际配置的预处理。 那么存在的问题
头文件没有实际意义,远程编译是合理的。 这种情况经常发生,如果
此类包括用于与实际不同的异常配置
组态。

-v, - 核实
验证 CPP 闭包中的文件是否包含在通过 include 计算的闭包中
处理器。

-w, --write_include_closure
编写一个 .d_approx 文件,其中列出了包含计算的所有包含文件
服务器; 使用-x,另外将CPP计算的包含文件写入一个
.d_exact 文件。

-X, --精确分析
改用 CPP,不要省略系统头文件。

包括 服务器 症状 AND 问题


下面列出了最有可能来自包含处理器的消息和警告。

前处理 本地。 包括 服务器 不能 覆盖: 不能 确定 默认 系统
包括 目录
为了确定默认的系统头目录,包含服务器运行
为会话期间所需的每种语言编译一次。 此消息表明
客户端上不存在指定给 distcc 的编译器。

前处理 本地。 包括 服务器 不能 覆盖: 百灵 输出 因为 包括 服务器
花费 更多 ...s 用户 处理 请求
在不常见的情况下,包含服务器无法分析非常复杂的宏
表达式。 distcc 客户端将使用普通的 distcc 模式。

警告: 文件路径 必须 be 相对的 但是 是不是
包含服务器不接受绝对文件路径,例如
/usr/include/stdio.h,在包含指令中,因为不能保证
编译服务器机器上的这个头将与编译服务器上的相同
客户。 包含服务器放弃分析包含闭包。 分区
客户端不能使用泵模式。

要以不总是可靠的方式克服此问题,请设置环境变量
INCLUDE_SERVER_ARGS='--unsafe_absolute_includes' 调用 distcc-pump 时
将 --unsafe_absolute_includes 选项传递给包含服务器的脚本。

警告: 绝对 文件路径 ... 忽略
--unsafe_absolute_includes 正在使用中。 这种情况发生在相同的
发出“文件路径必须是相对的但不是”的情况,但在此
如果包含将向 distcc 客户端提供答案。

警告: 途径 '/路径/文件' 改变/来了 存在/不存在 不再 存在
使用统计重置触发器时会发出这些警告。 因为 /PATH/FILE
更改后,包含服务器清除其缓存; 文件的新版本(或
缺少它)使包含分析无效。 这个消息通常可以是
忽略; 它确实意味着构建系统对文件的使用有些不稳定。
建议修复构建系统,以免文件被重写。

警告: 针对 翻译 单元 ..., 查找 of 文件 ... 解决 ... 谁的 实路径 is
...
当新的真实路径匹配
源文件或头文件被观察到。

区域中心 差异 症状


构建系统、distcc 和包含服务器之间的交互有点
复杂的。 当 distcc 命令从远程服务器接收到失败的编译时
在本地重试编译。 本节讨论造成差异的原因
在远程编译和本地编译之间。 这些由降级消息标记:

__________警告: ... 泵模式 汇编 失败 on 服务器, 但是 成功 本地。
__________Distcc-泵 降级 平原 模式。 我们 分区 差异 症状
部分 in 包括服务器(1) 男子 页面上发布服务提醒。

distcc-pump 脚本在构建结束时发出此消息。 这意味着对于在
至少一个 distcc 调用本地编译成功后远程编译
失败的。 发生这种差异的每个 distcc 调用也依次发出
消息,例如:

警告: 远程 汇编 of '……' 失败的, 重试 当地 得到了 a 不同 结果。

降级使后续的 distcc 调用使用普通的 distcc 模式。 因此
在构建的其余部分,预处理将在本地机器上进行。 这个
技术可以防止所有编译都在本地机器上结束的非常缓慢的构建
远程失败后。

当然,如果本地编译在远程失败后失败,那么distcc
调用以本地编译的非零状态退出。 错误信息
印刷的也是本地汇编的那些。

可以通过设置禁用 distcc-pump 模式到本地编译的回退行为
环境变量 DISTCC_FALLBACK 为 1,这使得 distcc 命令尽快失败
因为远程编译失败。 此设置对于调试为什么
远程编译出错,因为现在将打印服务器的输出。

接下来,我们讨论造成差异的可能原因。

用户 a 资源 or 文件 ,我们将参加 建立。
这当然会产生不一致的结果。

A 资源 or 文件 ,我们将参加 建立。
构建系统重写一个文件。 对于 Linux 内核 2.6,这发生在
'include/linux/compile.h' 和 'include/asm/asm-offsets.h'。 这个条件是固定的
通过让包含服务器知道它必须在任何状态时重置其缓存
的文件更改。 实际上,这是通过将文件收集在冒号中来完成的 -
分隔列表,然后将 INCLUDE_SERVER_ARGS 命令设置为:

include_server_args="--stat_reset_triggers=include/linux/compile.h:include/asm/asm-
偏移量.h"

A 文件 is 可能 包括, 但是 不能 存在, is 然后 后来 包括在内。

当某些头文件 foo.h 包含另一个头文件 twin.h 时会发生这种情况,但是
还没有生成trick.h文件,实际上忽略了包含
因为预处理指令。 包含服务器将探测
trick.h 的存在,因为它过度逼近了所有可能的方式指令
实际评估。 确定文件trick.h 不存在。 如果以后
生成,然后真正包含,那么包含服务器会误认为
该文件仍然不存在。 这个问题的解决方案是使
构建系统在第一次包含任何头文件之前生成trick.h
这是对trick.h的句法引用

包括 服务器 开始 --unsafe_absolute_includes.
如果本地存在远程不存在的头文件并且
实际使用的。 此类包含通常受条件保护
评估指令以便实际仅用于特定且经常使用的指令
不常见的平台。 如果你不是为这样的平台编译,那么它可能是
正确使用 --unsafe_absolute_include.

包括 服务器 具有 计算 包含。
我们不知道这种情况。

退出 编码


include_server.py 的退出码通常为0,表示include服务器已经启动
通过 pid_file 的存在正确传达。

环境 变数


DISTCC_EMAILLOG_WHOM_TO_BLAME 用于包含服务器自动化的电子邮件地址
电子邮件。 默认值是“distcc-pump-errors”(这是一个电子邮件地址,可能会
在您的域中不存在)。

此外,编译器的调用可能会使用额外的环境变量。

使用 onworks.net 服务在线使用 include_server


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad