問題タブ [lto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1656 参照

gcc - LTO でコンパイルされたコードを検出する方法は?

コードが -flto でコンパイルされているかどうかを検出する方法はありますか?

例は、デバッグなしで GCC (4.9.1) でコンパイルされた Linux でのクラシック ライブラリまたは実行可能ファイルです。

0 投票する
2 に答える
759 参照

linux - Bash - tarball の最初のファイルのみを抽出する

一連の tarball を含む LTO テープがあり、それぞれに約 300 個の tiff ファイルが含まれています。tarball の内容は事前にわかりません。

各 tarball から最初のファイルを抽出し、そのチェックサムを自分のコンピューターに存在する同じファイルと比較する必要があります。

現時点では、各tarballに駐車した後、実行しています...

... 内容を一覧表示し、最初のファイル名を取得します。しかし、私は -tvf が終了するのを待っている時間を無駄にしています。

最初のファイルの名前だけを取得する方法はありますか?

0 投票する
1 に答える
164 参照

gcc - cmake、内部ライブラリのリンクフラグを保持

src/foo で、-lwhatever にリンクされた lib foo を作成します

src/bar では foo を使用します

LTO のおかげかもしれませんが、bar の target_link_libraries に -lwhatever を追加する必要があります。そうしないと、コンパイル時にシンボルが不足しています。

透明化できないの?

0 投票する
1 に答える
3116 参照

c++ - GCC で LTO を使用してスタティック ライブラリをクロス コンパイルする未定義の参照

GCC 4.9.2 を使用して、Linux (x86_64-pc-linux-gnu) から Windows (x86_64-w64-mingw32) 用のアプリケーションをクロス コンパイルしようとしています。

静的ライブラリにリンクするターゲットをビルドし、リンク時の最適化も使用すると、ターゲットがライブラリから使用するすべてのシンボルについて、リンカーから未定義の参照エラーが発生します。

たとえば、bar.cpp から bar.a をビルドします。

および foo.cpp とのリンク

コマンドラインを使用する

エラーの結果

上から:

  • ar/ranlib に gcc ラッパーを使用しています
  • 外部依存関係はありません
  • すべてのファイルは同じオプションでコンパイルされます

-fuse-linker-plugin、gcc-ar と ar、シンボルの可視性オプション、最適化などのさまざまな組み合わせを使用してみましたが、LTO をオフにしないと正しくリンクできません。

すべてのターゲットは、ネイティブ コンパイラ (x86_64 Linux) で正しくビルドされます。

ここで私が見逃している明らかなものはありますか?

0 投票する
2 に答える
145 参照

c - すべてのコンパイル時の最適化をリンク時の最適化で実行できますか?

または、コンパイル時にのみ実行できる (したがって、コンパイル単位内でのみ機能する) いくつかの最適化はありますか? 私が質問したのは、C ではコンパイル単位がソース ファイルであり、状況によってはソース コードを個別のファイルに分割しない理由があるかどうかを理解しようとしているからです (たとえば、すべてのソースがは 1 つのファイルに含まれていませんでした)。

0 投票する
1 に答える
2241 参照

gcc - gcc LTO をライブラリ アーカイブで動作させるにはどうすればよいですか?

gccの専門家、

gcc が私のシステム (RedHat Enterprise Linux 5.7) に付属しているため、ライブラリ アーカイブで gcc lto を使用しようとしています。


1. binutils-2.22 を2 でビルドします--enable-plugins
。3 で gcc-4.7.2 をビルドし--with-plugin-ld=/path/to/ld/built/in/step1 --enable-lto
ます。次に、次の簡単なテストを行います。

以下はfoo()インライン化 できます。

以下はできませんが:

私が取り組んでいる製品の構築システムはアーカイブを使用する必要があるため、lto をライブラリ アーカイブで動作させるにはどうすればよいですか?

あなたの助けは大歓迎です。

どうもありがとう。

0 投票する
3 に答える
2753 参照

llvm - LLVM でカスタムのインターモジュラー パスを作成するには?

FunctionPassクラスを拡張して、LLVM で標準の分析パスを作成しました。すべてが理にかなっているようです。

ここで私がやりたいことは、いくつかのモジュール間パス、つまり、一度に複数のモジュールを分析できるパスを作成することです。このようなパスの 1 つの目的は、アプリケーション全体のコール グラフを構築することです。他のそのようなパスの目的は、関数呼び出しとそのパラメーターを含む最適化のアイデアを思いつくことです。

ModulePassクラスを拡張することにより、LLVM のプロシージャー間パスについて知っていますが、単一のモジュール内でしか分析できません。

LLVM のリンク時間最適化 (LTO)については知っていますが、(a) これが必要かどうかはよくわかりません。また、(b) LTO パスを実際に記述する方法に関する例やドキュメントも見つかりませんでした。

LLVM でモジュール間パス、つまりアプリケーション内のすべてのモジュールにアクセスできるパスを作成するにはどうすればよいですか?