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++。

下一个例子来自维基百科。下一个函数定义:

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 回答