0

有没有办法在 C 中实现目标文件的链接,使得某些对象只能相互链接?

例如。尝试链接对象 1 和对象 2 将起作用并生成一个有效的可执行文件,但尝试链接对象 1 和对象 3 将返回错误,或者生成的可执行文件将无法正常工作。

背景信息:基本上,情况是程序员A和程序员B将他们的对象发送到链接器公司。A 和 B 希望确保 Linker Company只能将他们的对象链接在一起,而不能将他们的对象与其他 Programmers(即 Programmer C 等)对象链接(因为这是非法的)。

Jörgen Sigvardsson 的回答很有用,但我想知道是否有更简单的方法。例如。如果尝试使用 gcc 将非法对象链接在一起,Linker Company 可以确定需要哪些符号并将它们添加到非法对象中,从而轻松打破限制。

4

3 回答 3

1

是的,有办法。在对象 1 中:

extern int object_1_symbol;
int object_2_symbol;

在对象 2 中:

int object_1_symbol;
extern int object_2_symbol;

这将要求您将这些对象链接在一起,并防止您将其与对象 3 链接在一起。这不是万无一失的,但它可能符合您的目的。

于 2011-10-23T16:37:26.440 回答
0

不,没有任何方法可以做你描述的事情。

于 2011-10-23T16:27:16.440 回答
0

如果你想确保程序要么链接两者foo1.ofoo2.o,要么都不链接它们,只需将它们组合成一个对象:

ld -r -o foo-combined.o foo1.o foo2.o

并且只给最终用户foo-combined.o

如果您想实现其他目标,请更清楚地重申您的问题。

于 2011-10-23T16:29:43.007 回答