問題タブ [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 投票する
0 に答える
82 参照

c++ - 静的ライブラリのクロス TU 最適化

通常、リンク時の最適化は、実際のマシン コードではなくオブジェクト ファイルに IR を挿入することによって実装されます。したがって、静的ライブラリを扱う場合、それはそのような IR ファイルの単なるコレクションであり、それを使用するコードが変更されるたびに LTO を実行する必要があります。代わりに共有ライブラリをビルドすると、LTO は 1 回だけ実行され、dll 内のコードは完全に最適化されます。

静的ライブラリを扱うときに、翻訳単位全体でいくつかの最適化を行うことも可能ですか? プログラム全体の仮定を行うことができないため、同じではないことはわかっていますが、ヘッダーで定義されていないセッター/ゲッターをインライン化するなど、いくつかの基本的なことを実行できるはずではありませんか?

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

gcc - -fno-short-enums を無視する GCC (Sourcery codebench 2013.11) リンク時の最適化

簡単なソース ファイルが 2 つある

obj1.cc:

obj2.cc:

Sourcery codebench lite 2013.11 を使用しています。

を使用して各ソースファイルをコンパイルします

-flto なしでそれらをリンクすると、リンク時の最適化が呼び出されず、int サイズの列挙型を持つとマークされたオブジェクト ファイルが取得されます。

しかし、単純に-fltoリンカーの呼び出しに追加すると、出力には小さな列挙型があると主張されます。

でリンク ステップを実行すると-v、gcc が lto ステージに到達したときに次のように表示されます。

LTOステップ中に何かが取り除か-fno-short-enumsれたように見えます。COLLECT_GCC_OPTIONSこれは一般的な gcc の問題であり、Sourcery ビルドに限定されないのではないかと思います。

これはgccのバグですか?32ビット列挙型で構築された特定のライブラリにリンクするために、短い列挙型なしでオブジェクトファイルを生成するにはgccが必要です。ソースから gcc を再構築せずにこの目標を達成する方法はありますか?

更新: arm-none-eabi-gcc 4.8.2-14ubuntu1+6toolchain ( http://packages.ubuntu.com/trusty/devel/gcc-arm-none-eabi ) を使用して、Ubuntu 14.04 でまったく同じ動作を確認しました。)

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

webrtc - LTO なしで Chromium、WebRTC をビルドする

私は Arch Linux x86_64 を使用しており、WebRTC ライブラリを構築しようとしています。次のようにすると、コンパイル エラーが発生します。

リンク時の最適化に問題があるようです。ただし、LTO を有効にせずに WebRTC を構築する方法がわかりません。失敗したコマンドを手動で実行して追加すると-fno-lto、正常にリンクされます。gypすべてに適用されるように、構成内のコンパイラ/リンカー フラグを追加または変更するにはどうすればよいですか?

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

c++ - マルチスレッド サポートと競合するリンク時の最適化

で改善されたリンク時間最適化サポートについて読んだg++-4.9ので、試してみたいと思います。悲しいことに、実行時に例外が発生しますstd::system_error。特にe.what() == Enable multithreading to use std::thread: Operation not permitted.

これで、通常、そのエラーを修正する方法がわかりまし-pthreadた。コンパイラの呼び出しに追加しますが、実際には、このパラメーターが既にあります。

私のサンプルコードは次のとおりです。

コンパイル済み (X は 7、8、または 9)

期待どおりに問題なく動作し、実行時エラーはありません。

でも、

例外で失敗しsystem_errorます。

質問:

この動作は意図されたものですか (修正は何ですか?)、それともバグですか?

(この質問が出る前に: 私のコンパイラはすべて でビルドされています--enable-threads=posix)

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

c - gcc LTO - 共有ライブラリ - そうですか?

環境 :

lto (リンク時コンパイル) の仕組みを理解しようとしている

コード:

私はそれらのファイルを持っています:

ジュリア.h:

julia.c :

次のように共有ライブラリとしてコンパイルされます: gcc -O3 -fPIC -shared julia.c -o libjulia.so -L$PWD -I$PWD -flto

そして私のメインプログラム:

main.c

コンパイル: gcc -O3 main.c -I/path/to/inc -L/path/to/lib -Wl,-rpath=/path/to/lib -ljulia -flto

それは罰金をコンパイルします。

質問 :

では、これは hello world プログラムですが、LTO を正しく使用していますか? リンケージを最適化するのに必要なのはそれだけですか?

ありがとう

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

c++ - 静的ライブラリで lto を使用するにはどうすればよいですか?

で静的ライブラリを構築しようとすると-flto、未定義の参照エラーが発生します。

ライブラリ.cpp :

main.cpp :

コンパイル出力:

library.oの代わりにとリンクすると問題なく動作しlibrary.aます。私は何が欠けていますか?これは、GCC 4.9.1 および binutils 2.24 で発生します。

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

c++ - 置き換えられた演算子 new を使用した Clang リンク時の最適化により、valgrind で free()/delete の不一致が発生する

-flto を指定して clang 3.5.0 を使用し、共有ライブラリとリンクする場合、共有ライブラリ内の への呼び出しは、メイン オブジェクトからのoperator deleteへの呼び出しと同じシンボル解決順序に従わないようです。operator new例:

共有.cpp :

main.cpp :

これをビルドして valgrind で実行すると、次のようになります。

valgrind の を見つけていることがわかりますが、 fromoperator deleteを使用しています。対照的に、gcc を使用したまったく同じビルド (を に置き換えるだけ) は正常に動作します。理由、またはそれを回避する方法はありますか?operator newmain.cppclang++g++

編集: @Deduplicator の要求に応じて、シンボルのインポートとエクスポート。