問題タブ [lld]
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.
gcc - Clang + LLD (MSys2/MingW) を使用して単純な C プログラムをリンクすると、間違ったアンワインド テーブル スタイルが生成される (.pdata ではなく .eh_frame)
そのため、現在抱えている問題に関する情報を見つけることができません。ここの誰かがそれを解決する方法を知っていることを願っています。
非常に単純な C プログラムをコンパイルするために Clang 11.0.0 を使用しています。.pdata
Windows 標準に従ってアンワインド情報を含むセクションを生成する必要があります (参照: https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-runtime_function )。
これを 64 ビット用にコンパイルし、-funwind-tables
フラグを使用する場合。LLD は、期待どおりの形式で .pdata セクションを適切に生成します。ただし、32 ビット (i686-w64-windows-gnu) 用にコンパイルすると.eh_fram
、非 Windows 形式のアンワインド情報を含むセクションが常に生成されます。
.pdata
Clang/GCC または LLD に、32 ビットでコンパイルされたプログラムのスタイルの巻き戻し情報も使用するように指示するにはどうすればよいですか?
コンパイラまたはリンカーに 32 ビット用の SEH を強制的に使用させる方法はありますか?
これは私が現在テストしているものです:
C コード:
32 ビット コンパイル済みセクション:
64 ビットでコンパイルされたセクション (これ.pdata
は 32 ビットのセクションでも必要です):
c++ - Ubuntu 20.04 でのブースト スレッドでの Clang 10 リンク エラー
clang/lld 7 を使用して Ubuntu 18.04 から、clang/lld 10 および boost 1.71 を使用して 1.65 を 20.04 にアップグレードした後、対処方法がわからないリンカー エラーが発生しました。互換性のないペアであることが知られている Ubuntu 20.04 の clang & boost はありますか? clang を使用して Ubuntu 20.04 でコンパイルするためのオプションは何ですか?
エラーの最小限の例は
ノート:
- GCC 9 とゴールド リンカーで問題なく動作します。
- clang + gold リンカーの組み合わせはほとんど同じエラー メッセージで失敗し、bfd リンカーは非常に短いエラー メッセージで失敗します。以下の出力も示します。
- 同じエラーは、clang/lld 10 ではなく 9 で発生します。
ubuntu 20.04 システムまたはコンテナーで簡単に再現できる最小限の例を作成しました。複製には、ubuntu:focal
dockerhub のプレーン コンテナーを使用しました。
- clang/lld 10 をインストールし、1.71 をブーストします
これですべての要件がインストールされ、LLD がデフォルトのリンカーになります。
- 最小限の例を作成し、コンパイル/リンクします
- 期待される結果:
- 実結果
- BFD リンカ (GNU ld 2.34) を使用:
- リンカとして LLD 10 を使用 (ただし、ゴールド リンカ エラーは非常によく似ています):