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

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

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

任何想法表示赞赏。

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

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

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

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top