这是我反复遇到的一个问题,通常与插件有关,但最近我在尝试解决一些构建系统问题时遇到了这个问题。我主要关心的是基于 *nix 的系统,但我认为它也适用于 Windows。
问题是,进行动态链接所需的最少信息量是多少?我知道像 Debian 这样的 Linux 发行版只有一个“i686”,这就足够了。但是,我想这里有一些隐式信息,只要使用 -march=i686
编译任何共享对象,我可能就无法对它们进行动态链接,对吗?
那么我必须正确匹配什么才能成功加载共享对象?我知道对于 c++,由于名称修改,甚至编译器(有时是版本)也必须匹配,但我有点希望 c 的情况并非如此。
任何想法表示赞赏。
编辑:
尼尔的回答让我意识到我并不是真正在谈论动态链接,或者更确切地说,问题有两个方面,
- 静态链接需要什么,以及
- 动态链接需要什么
我猜我对第一个抱有更高的希望。
最佳答案
至少,代码必须是针对同一处理器系列编译的,并且您需要知道库和函数的名称。最重要的是,您需要相同的 ABI。您应该意识到,不管人们怎么想,C 标准并没有指定 ABI,两个 C 编译器(或同一编译器的版本)完全有可能遵守该标准,在同一平台上运行,但具有不同的功能。 ABI。
至于准确指定架构细节 - 我必须承认我从未这样做过。您是否计划在不同的 Linux 变体上分发二进制库?
关于c - 进行(动态)链接所需的最少信息量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2221438/