関数定義が利用できず、関数プロトタイプのみがヘッダー ファイルに外部化されている場合、g++ コンパイラはエラーを返しません。ただし、リンク中に、g++ リンカーはエラーを識別し、対応する fn への「未定義の参照」と表示します。私は abt fn 定義を気にしません。私はバイナリイメージを取得したいだけで、そのイメージから対応する fn が呼び出されるたびに、その時だけクラッシュしたいと思っています。この「未定義参照」リンカー エラーを抑制するためのリンカー フラグを教えてください。VC++ には、/FORCE というオプションがあります。同様のフラグはありますか?
1366 次
1 に答える
2
完全に未定義の動作ですが、クラッシュが必要な場合は...
関数などの未定義のシンボルがある場合void h()
、そのマングルされた名前は になります_Z1hv
。したがって、その名前と外部リンケージをシンボルに定義すると、タイプが間違っていても検出されます。
int _Z1hv = 0;
void h();
int main()
{
h();
}
これはリンクしますが、実行時にクラッシュします。これは、への呼び出しがh()
整数変数のアドレスで関数を「実行」しようとするためです。
これを行うことは間違っており、嫌で、子猫を殺します。
于 2012-08-23T13:04:10.533 に答える