在C ++中,Ordinal链接和名称链接是什么意思?

时间:2017-06-16 09:33:15

标签: c++ c++11

我一直在尝试编译第三方库(Mongo C ++),当我尝试针对库运行我自己的可执行文件时,出现了“序数XXXX无法位于动态链接库XYZ中”的错误消息。那么序数链接究竟是什么呢?它与名称链接有何不同?我如何强制使用一个对抗另一个?

1 个答案:

答案 0 :(得分:2)

在Windows上,库可以通过提供ASCII字符串(在C ++的情况下包含损坏的名称)或序号来导出符号,这只是整数而没有任何名称。如果通过序数猜测方法签名导出某些内容并且它的目的可能非常困难,那么它可以被认为是隐藏实现细节的方法(就像不发送调试符号一样)。虽然有可能弄乱索引并打破向后的二进制兼容性。但是你获得了更快的库加载时间。您可以通过编写模块定义文件(.def)来控制导出方法:

EXPORTS
    ?FancyMangledMethod1@fancy_namespace@@Z @1 NONAME
    ?FancyMangledMathod2@fancy_namespace@@Z

FancyMangledMethod1将以1序数导出,而FancyMangledMathod2将以错位名称导出。