0

jpegライブラリの私のシステムで言ってください:

$ > nm libjpeg.a | grep jpeg_finish_decompress
00000510 T _jpeg_finish_decompress

しかしopenjpegライブラリでは:

$ > nm lib/libopenjpeg.a | grep opj_decode_with_info
00000240 T _opj_decode_with_info@12

後者は末尾に @12 があります。引数の合計サイズは 12 だと思います。
それにもかかわらず、一部の記号に @ で終わるものがあるのはなぜですか? mupdf ライブラリをコンパイルしようとしたときに問題が発生します。たとえば、jpeg ライブラリに対しては問題なくリンクしますが、openjpeg に対してはリンクに失敗します。

4

1 に答える 1

0

簡単な答えはname manglingです。C++ だけでなく、プレーンな C コードでも使用されます。

次の例はwikipediaからのものです。次の関数定義:

int _cdecl    f (int x) { return 0; }
int _stdcall  g (int y) { return 0; }
int _fastcall h (int z) { return 0; }

これらの記号を与える:

_f
_g@4
@h@4
于 2012-08-14T04:20:52.030 に答える