c++ - 在 C++ 中,按序号链接和按名称链接是什么意思?

标签 c++ c++11

我一直在尝试编译第三方库 (Mongo C++),当尝试针对该库运行我自己的可执行文件时,收到格式为“The ordinal XXXX could not be located in the dynamic link library XYZ”的错误消息。那么究竟什么是顺序链接,它与按名称链接有何不同?我怎样才能强制使用一个来对抗另一个?

最佳答案

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

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

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

关于c++ - 在 C++ 中,按序号链接和按名称链接是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44585808/

相关文章:

c++ - 什么是悲观?

c++ - 我希望 cin 读取到 '\n' 但我不能使用 getline

c++11 - 使用tensorflow_cc.so时未定义对 `(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)'的引用

c++ - 在Linux中,当同一套接字上的accept()调用正在进行时,套接字描述符在某些条件下从另一个线程关闭?

c# - 加载 MITab dll 在 c# 中给出 System.BadImageFormatException

c++ - 段错误(核心已转储)C++ 面向对象编程

c++ - 为什么我的 C++ vector 会调整大小并附加一个新 vector 而不是原地更改?

c++ - 将较小的 vector 与较大的 vector 进行比较,以检查它是否在较小的末尾有所不同

c++ - 像这样使用 'delete' 会释放原来分配的内存吗?

c++ - boost::optional - 将 boost::in_place 用于构造函数通过引用获取其他对象的对象