8

Visual Studio 2008 内で __stdcall を使用して dll をコンパイルすると、dll 内のコンパイルされた関数名は次のようになります。

関数名

ただし、wx-dev-cpp を使用して GCC を使用して同じ dll をコンパイルすると、GCC は関数が持つパラメーターの数を追加するため、Dependency walker を使用した関数の名前は次のようになります。

FunctionName@numberOfParameters または == FunctionName@8

dll でエクスポートされたシンボルから @nn を削除するように GCC コンパイラに指示するにはどうすればよいですか?

4

3 に答える 3

6

__stdcall は、先頭にアンダースコアを追加し、末尾にパラメーターのバイト数 (@ で区切る) を追加して関数名を装飾します。

したがって、関数:

void __stdcall Foo(int a, int b);

..._Foo@8 になります。

.DEF ファイルの EXPORTS セクションに関数名 (装飾なし) をリストすると、装飾なしでエクスポートされます。

この差なのかな。

于 2008-09-20T07:53:07.750 に答える
6

-Wl,--kill-atgcc コマンドラインで使用するだけで--kill-at、リンカーに渡されます。

参考文献:

于 2008-10-31T20:08:53.700 に答える