c - 进行(动态)链接所需的最少信息量?

标签 c linker dynamic-linking

这是我反复遇到的一个问题,通常与插件有关,但最近我在尝试解决一些构建系统问题时遇到了这个问题。我主要关心的是基于 *nix 的系统,但我认为它也适用于 Windows。

问题是,进行动态链接所需的最少信息量是多少?我知道像 Debian 这样的 Linux 发行版只有一个“i686”,这就足够了。但是,我想这里有一些隐式信息,只要使用 -march=i686 编译任何共享对象,我可能就无法对它们进行动态链接,对吗?

那么我必须正确匹配什么才能成功加载共享对象?我知道对于 c++,由于名称修改,甚至编译器(有时是版本)也必须匹配,但我有点希望 c 的情况并非如此。

任何想法表示赞赏。

编辑:
尼尔的回答让我意识到我并不是真正在谈论动态链接,或者更确切地说,问题有两个方面,

  1. 静态链接需要什么,以及
  2. 动态链接需要什么

我猜我对第一个抱有更高的希望。

最佳答案

至少,代码必须是针对同一处理器系列编译的,并且您需要知道库和函数的名称。最重要的是,您需要相同的 ABI。您应该意识到,不管人们怎么想,C 标准并没有指定 ABI,两个 C 编译器(或同一编译器的版本)完全有可能遵守该标准,在同一平台上运行,但具有不同的功能。 ABI。

至于准确指定架构细节 - 我必须承认我从未这样做过。您是否计划在不同的 Linux 变体上分发二进制库?

关于c - 进行(动态)链接所需的最少信息量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2221438/

相关文章:

objective-c - 链接到 Quartz 框架或 ARC 错误?

c++ - 为什么要为结构的多个数据成员而不是单个成员添加填充?

c - 回复 udp 数据包被阻止

c# - 'statically linked' 和 'dynamically linked' 是什么意思?

assembly - 为什么除了 GOT 之外还有 PLT,而不是仅仅使用 GOT?

linker - LLVM 将 pthread 函数调用插入 IR

c - 声明指向数组的指针并传递给函数时指针如何工作

c - 在GDB(Eclipse)中使用堆栈跟踪调试Coldfire MCF5235上的未知程序异常

c++ - 模板函数在编译期间被报告为 "undefined reference"

与交叉编译器的静态链接