英語フランス語スペイン語

Ad


OnWorksファビコン

include_server - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターを介して、OnWorks の無料ホスティング プロバイダーで include_server を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できる include_server コマンドです。

プログラム:

NAME


include_server.py - C/C++ のインクルード依存関係の控えめな概算

SYNOPSIS


インクルードサーバー - 港 INCLUDE_SERVER_PORT [オプション]

DESCRIPTION


include_server.py はインクルード サーバー プロセスを開始します。 このプロセスは、
距離(1) C/C++ コンパイルに含めるファイルについてのクライアント。 include_server.py
コマンド自体は、インクルード サーバーが生成されるとすぐに終了します。

INCLUDE_SERVER_PORT 引数は、すべての通信に使用されるソケットの名前です
distcc クライアントとインクルード サーバーの間。 の distccポンプ(1) コマンドが担当
ソケットの場所を作成し、それをこのスクリプトに渡し、すべてに渡すため
INCLUDE_SERVER_PORT という名前の環境変数を介して distcc クライアント。

インクルード サーバーが使用するプロトコルは、distcc の RPC 実装を使用します。 各distcc
リクエストは、(1) 現在のディレクトリと (2) の引数のリストで構成されます。
コンパイルコマンド。

インクルード サーバーがリクエストを処理できる場合、distcc クライアントに次のように応答します。
ファイルパスのリストを送信します。 ファイルパスは、圧縮されたソースとヘッダーのものです
インクルード分析を通じてコン​​パイルに必要であることが判明したファイル。 リストも
シンボリック リンクと、コンパイル サーバーに必要なダミー ファイルでさえ構成されます。
コンパイルに必要なファイルシステムの部分の正確なレプリカを構築します。 の
このようにして、/path/foo.h のような必要なヘッダー ファイルが圧縮され、名前が変更されて、
/dev/shm/tmpiAvfGv.include_server-9368-1/path/foo.h.lzo などの一時的な場所。 の
distcc クライアントはこれらのファイルをコンパイル サーバーに渡します。
解凍して一時的にマウントします。

インクルード サーバーが要求を処理できない場合は、空のリストを返します。
distcc クライアントに。

インクルード サーバーに関連する障害には XNUMX 種類あります。 インクルードサーバーは
インクルードの計算に失敗するか、他の方法で失敗します。セクションを参照してください インクルード サーバ 症状.
また、計算結果が不適切なため、削除サーバーでのコンパイルが失敗する場合があります。
クロージャーを含めますが、ローカルで再試行すると成功します。セクションを参照してください DISTCC 矛盾
症状.

オプション 概要


次のオプションは、include_server.py によって理解されます。

-dPAT、 --debug_pattern=PAT
警告とデバッグをオンにするためのビット ベクトル
1 = 警告
2 = 一部の関数をトレースする
その他の XNUMX の累乗: include_server/basics.py を参照してください。

-e、 - Eメール
電子メールを「distcc-pump-errors」に送信するか、定義されている場合は環境変数の値を送信します
DISTCC_EMAILLOG_WHOM_TO_BLAME、インクルード サーバーに問題が発生した場合。 デフォルトは
メールを送らないこと。

--email_bound
送信する電子メールの最大数 (最終的な電子メールに加えて)。 デフォルト: 3。

--メールなし
電子メールを送信しないでください。 これがデフォルトです。

--path_observation_re=RE
ファイル名が一致する実際のパスに解決されるたびに警告メッセージを発行する
これは、Python 構文の正規表現です。 探すのに便利です
含まれているファイルが実際にどこから来たのかを調べます。 RE="" を使用してそれらをすべて検索します。 ノート:
警告は、少なくとも -d1 で有効にする必要があります。

--pid_file ファイルパス
インクルード サーバーの pid は、ファイル FILEPATH に書き込まれます。 これにより、スクリプトが許可されます
そのような distccポンプ インクルードサーバーを破棄します。

-s、 - 統計
インクルード分析に関する情報を stdout に出力します。

--stat_reset_triggers=リスト
LIST 内のファイルパスのタイムスタンプが変更されたとき、または
filepath が存在するか存在しなくなります。 LIST はコロンで区切られた文字列です。
おそらく単純なグロブを含むファイルパス (Python の glob モジュールで許可されている)。
そのような変更が発生するたびに警告を表示します (警告が有効になっている場合)。 これ
オプションは、ソースが
ファイルはビルド中に変更されません。

-NS、 - 時間
経過時間、ユーザー時間、およびシステム時間を stderr に出力します。

--unsafe_absolute_includes
絶対ファイルパスが含まれていても、コンパイル サーバーで前処理を行う
遭遇します。 通常、インクルードサーバーはローカルの前処理にフォールバックします
絶対インクルードが検出された場合。 したがって、このフラグはそのようなことを防ぐのに役立ちます
絶対インクルードが誤警報である場合のフォールバック。
include は、前処理中に破棄されるか、絶対に含まれるファイル
コンパイル サーバー上に存在します。

より正確には、 --unsafe_absolute_includes を使用すると、絶対インクルードは無視されます
インクルード クロージャを収集する目的。 このオプションを使用すると、
(1) ヘッダーが実際に
コンパイルサーバーとそれはクライアントと同じではないかもしれません、(2)インクルード
ヘッダーのディレクティブはそれ以上分析されません。

このオプションは、そのようなハードコーディングされた絶対位置を持つコードをコンパイルするのに役立ちます
をレンダリングする条件付きディレクティブ (例: "#ifdef") 内のヘッダー ファイルの
関係のないものを含みます。 より正確には、これらのインクルードは削除する必要があります。
実際の構成の前処理。 次に、存在の問題
ヘッダー ファイルは意味がなく、リモート コンパイルは健全です。 これは、多くの場合、
そのようなインクルードは、実際とは異なる異常な構成を意図しています
構成。

-v、 - 確認
CPP クロージャー内のファイルが、include によって計算されたクロージャーに含まれていることを確認します
プロセッサ。

-w、 --write_include_closure
インクルードによって計算されたすべてのインクルード ファイルをリストする .d_approx ファイルを作成します。
サーバ; -x を指定すると、CPP によって計算されたインクルード ファイルが追加で
.d_exact ファイル。

-NS、 --exact_analysis
代わりに CPP を使用し、システム ヘッダー ファイルを省略しないでください。

インクルード サーバ 症状 そして 問題


インクルード プロセッサから出力される可能性が最も高いメッセージと警告を以下に示します。

前処理 ローカル。 含める カバー: できませんでした 決定します デフォルト  
include ディレクトリ
デフォルトのシステム ヘッダー ディレクトリを決定するために、インクルード サーバーは
コンパイラーは、セッション中に必要な言語ごとに XNUMX 回。 このメッセージは、
distcc に指定されたコンパイラがクライアントに存在しないこと。

前処理 ローカル。 含める カバー: バイリン でる なぜなら include
費やした 他には? より ...s user 時間 取り扱い 要求
まれな状況で、インクルード サーバーが非常に複雑なマクロの分析に失敗する
式。 distcc クライアントはプレーンな distcc モードを使用します。

警告: ファイルパス しなければなりません be 相対 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。 ない
インクルード サーバーは、次のような絶対ファイル パスを受け入れません。
/usr/include/stdio.h をインクルード ディレクティブに含めます。
コンパイル サーバー マシン上のこのヘッダーは、
クライアント。 インクルード サーバーは、インクルード クロージャの分析を断念します。 ディストリクト
クライアントはポンプ モードを使用できません。

常に信頼できるとは限らない方法でこの問題を解決するには、環境変数を設定します
distcc-pump を呼び出すときの INCLUDE_SERVER_ARGS='--unsafe_absolute_includes'
--unsafe_absolute_includes オプションをインクルード サーバーに渡すスクリプト。

警告: 絶対の ファイルパス ... ました 無視される
--unsafe_absolute_includes が使用されています。 この状況は同じ環境で発生します
「ファイルパスは相対である必要がありますが、そうではありません」が発行された場合などの状況ですが、これでは
その場合、インクルードは distcc クライアントへの回答を提供します。

警告: パス 「/パス/ファイル」 変わった/来た あり/なし より長いです 存在
これらの警告は、統計リセット トリガーを使用するときに発行されます。 なぜなら /PATH/FILE
変更すると、インクルード サーバーはそのキャッシュをクリアします。 ファイルの新しいバージョン (または
それがない) と、インクルード分析が無効になります。 通常、このメッセージは
無視; これは、ビルド システムによるファイルのやや不安定な使用を意味します。
ファイルが書き換えられないようにビルド システムを修正することをお勧めします。

警告: 翻訳 単位 ···、 検索 of file ... 解決 〜へ ... その リアルパス is
...
この警告は --path_observation_re を指定すると発生します。
ソースまたはヘッダー ファイルが監視されます。

DISTCC 矛盾 症状


ビルド システム、distcc、およびインクルード サーバー間のやり取りは、多少複雑です。
繁雑。 distcc コマンドがリモート サーバーから失敗したコンパイルを受け取ると、
ローカルでコンパイルを再試行します。 このセクションでは、不一致の原因について説明します
リモート コンパイルとローカル コンパイルの間。 これらは、降格メッセージによってフラグが付けられます。

__________警告: ... ポンプモード コンパイル 失敗した on サーバ、 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。 成功した ローカル。
__________Distccポンプ ました 降格 〜へ 平野 モード。 見る   距離 不一致 症状
in   インクルードサーバー(1) man ページで見やすくするために変数を解析したりすることができます。

distcc-pump スクリプトは、ビルドの最後にこのメッセージを発行します。 これは、
ローカル コンパイルがリモート コンパイル後に成功した少なくとも XNUMX つの distcc 呼び出し
失敗した。 このような不一致が発生した各 distcc 呼び出しも、順番に発行されます。
次のようなメッセージ:

警告: リモート 編集 of 「...」 失敗した、 再試行した 局部的に & a 異なります 結果。

降格により、後続の distcc 呼び出しでプレーンな distcc モードが使用されます。 したがって
ビルドの残りの部分では、ローカル マシンで前処理が行われます。 これ
この手法は、すべてのコンパイルがローカル マシンで終了する非常に遅いビルドを防ぎます。
リモートで失敗した後。

もちろん、リモートの失敗の後にローカルのコンパイルが失敗した場合、distcc は
呼び出しは、ローカル コンパイルのゼロ以外のステータスで終了します。 エラーメッセージ
印刷されているものもローカル編集のものです。

distcc-pump モードからローカル コンパイルへのフォールバック動作は、設定によって無効にできます。
環境変数 DISTCC_FALLBACK を 1 に設定すると、distcc コマンドがすぐに失敗します。
リモートコンパイルが失敗したため。 この設定は、なぜ
サーバーからの出力が印刷されるため、リモートコンパイルは失敗しました。

次に、不一致の考えられる原因について説明します。

  user 変更 a source or ヘッダ file 間に   ビルド。
もちろん、これは一貫性のない結果をもたらします。

A source or ヘッダ file 変更 間に   ビルド。
ビルド システムはファイルを書き換えます。 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 ヘッダ file is 含まれています、 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。 ありません 存在し、 & is その後 後で 含まれています。

これは、一部のヘッダー foo.h に別のヘッダー ファイル trick.h が含まれている場合に発生しますが、
Trick.h ファイルはまだ生成されておらず、インクルードは実際には無視されます
前処理ディレクティブのため。 インクルード サーバーは、
考えられるすべての方法を過大評価するため、trick.h の存在
実際に評価します。 ファイル trick.h は存在しないと判断されます。 後なら
生成されて実際にインクルードされると、インクルード サーバーは誤って信じる
ファイルがまだ存在しないこと。 この問題の解決策は、
ビルド システムは、最初にヘッダー ファイルがインクルードされる前に、trick.h を生成します。
これは、trick.h への構文参照を作成します

  include ました 開始   --unsafe_absolute_includes.
これは、リモートには存在せず、ローカルにヘッダー ファイルが存在する場合に問題になります。
実際に使われているもの。 そのようなインクルードは、多くの場合、条件付きで保護されています
特定の頻繁にのみ実際に使用されるように評価するディレクティブ
珍しいプラットフォーム。 そのようなプラットフォーム用にコンパイルしていない場合は、
正しい使い方 --unsafe_absolute_include.

  include 持っています 計算された   間違った 含まれています。
私たちはそのような状況を知りません。

EXIT コード


include_server.py の終了コードは通常 0 です。インクルード サーバーが起動されていること
pid_file の存在によって適切に伝達されます。

ENVIRONMENT 変数


DISTCC_EMAILLOG_WHOM_TO_BLAME 自動化されたインクルード サーバーに使用する電子メール アドレス
メール。 デフォルトは「distcc-pump-errors」です (これはおそらく
あなたのドメインには存在しません)。

さらに、コンパイラの呼び出しでは、追加の環境変数が使用される場合があります。

onworks.net サービスを使用してオンラインで include_server を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad