問題タブ [gcc9]

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 に答える
1166 参照

gcc - /usr/lib64 が ld.so のデフォルトの場所にないのはなぜですか?

昨日、ソースからビルドして gcc をバージョン 8.4.0 から 9.3.0 にアップグレードしようとしました。これは、Ubuntu の apt リポジトリからインストールできる最新バージョンが 8.4.0 であるためです。

ビルドとインストールのプロセスはすべて問題なく、gcc-9.3.0 でしか実装されていない機能を含めても、どんな C++ コードでもコンパイルできます。しかし、コードで C++ STL を使用した場合、プログラムを実行できません。

ldd my-program」によって、問題が見つかりました。gcc-9.3.0 はファイルlibstdc++.so.6.0.28/usr/lib64/にインストールしたようですが、公式バージョン (gcc-8.4.0)のファイル( libstdc++.so.6.0.25 ) は存在します。 /usr/lib/x86_64-linux-gnu/にあるため、ld.so は my-program のライブラリをロードできません。「/usr/lib64」をLD_LIBRARY_PATH環境変数に追加すると、機能します。

/usr/lib64 が Kubuntu-18.04.4LTS の ld.so のデフォルトの検索場所の 1 つではないのは奇妙ですか、それとも間違っていますか?

LD_LIBRARY_PATH を使用するか、/etc/ld.so.conf にパスを追加することで解決できることはわかっていますが、/usr/lib64 がデフォルトのパスではないことに疑問を感じています。

さらに、ビルド プロセスを確認しました。

ターゲットを Ubuntu の apt リポジトリにある公式のターゲットにできるだけ近づけるために、構成する前に、" echo | gcc -v -x c -E -" を使用して公式の gcc-8.4.0 ターゲットのすべてのビルド オプションを取得し、それらを自分自身に適用しました。次のようにビルド:

オプション「--libdir=/usr/lib」は、ターゲットライブラリをインストールするパスを明示的に設定することに注意してください。 しかし、ファイル libstdc++.so.6.0.28 はまだ /usr/lib64 にインストールされていました。

私が見逃したものは何ですか?

どんな助けやヒントも感謝されます!

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

c - 同じプログラムのさまざまなバリエーションでパフォーマンスの違いはありません

バイナリ検索アルゴリズムの glibc の実装をコピーし、必要に応じて少し変更しました。私はそれをテストし、GCC について学んだ他のこと (属性と組み込み) をテストすることにしました。コードは次のようになります。

さて、このプログラムは問題なく動作します。たとえば、次のようなコード行を追加すると、問題が発生します。

この場合、より高速なコードが期待できますが、複数のテスト (数十回のテスト) の後でもパフォーマンスは変わりませんでした。また、プログラムを 8 と 1 の位置合わせでテストしましたが、変更はありませんでした。タイプサイズよりも小さいアラインメントを使用しているため(私の場合、64ビットマシンではuint_fast16_tは8バイトです)、gccがエラー/警告をスローすることさえ期待していましたが、何もありませんでした。次に、キャッシングを追加する別の変更 (GCC 9 で導入)。for ループの前に次のコードを追加しました。

性能も変わらない。CPU が最初に配列を自動的にキャッシュしている可能性があることがわかったbinary_searchので、ループを排除しfor、キャッシュ ラインの有無にかかわらず再度数回測定しましたが、パフォーマンスの変化にも気づいていません。
詳しくは:

  1. CentOS8 64bit 最新カーネルを使用
  2. GCC 9.2.1 20191120 の使用
  3. でコンパイル、コンパイル-O3 -Wall -pthread -lanl -Wno-missing-braces -Wmissing-field-initializers中にエラー/警告なし
  4. 物事は最適化されていません(チェックされたasm出力)

私は何かを知らないと確信しています/私は何か間違ったことをしています。

完全なコードはこちらから入手できます。

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

c++ - WindowsでC ++ 20を使用するには?

私はWindows 10で作業しており、現在システムにgcc8がインストールされていますが、#include <execution>このバージョンのgccでは動作しません。だから、gcc 9が欲しいのですが、おそらく最新のgccを持っているmingw 8(最新バージョン)をダウンロードしました。

しかし、このバージョンの mingw にはインストーラーがありません。ドライバーをコピーしましたが、システム変数に追加する必要があるパスに行き詰まっています。それ以来、失われたexeを含むビンはありません。誰でもそれで私を助けることができますか?