0

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

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

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

任何想法表示赞赏。

编辑
尼尔的回答让我意识到我并不是真的在谈论动态链接,或者更确切地说,这个问题是双重的,

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

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

4

1 回答 1

2

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

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

于 2010-02-08T12:22:13.713 回答