C语言中的一对一链接

C语言中的一对一链接,c,linker,dependencies,object-files,C,Linker,Dependencies,Object Files,有没有办法在C中实现对象文件的链接,使得某些对象只能彼此链接在一起 尝试链接对象1和对象2将起作用并生成一个可执行文件,但尝试链接对象1和对象3将返回错误,或者生成的可执行文件将无法正常工作 背景资料: 基本上,情况是程序员A和程序员B将其对象发送到链接器公司。A和B希望确保链接器公司只能将其对象链接在一起,而不能将其对象与其他程序员(即程序员C等)对象链接(因为这是非法的) Jörgen Sigvardsson的答案很有用,但我想知道是否有一种更简单的方法。例如,如果试图使用gcc将非法对象链

有没有办法在C中实现对象文件的链接,使得某些对象只能彼此链接在一起

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

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


Jörgen Sigvardsson的答案很有用,但我想知道是否有一种更简单的方法。例如,如果试图使用gcc将非法对象链接在一起,链接器公司可以确定需要哪些符号,并将它们添加到非法对象中,轻松克服限制。

不,没有任何方法可以执行您所描述的操作。

如果您想确保程序同时链接
foo1.o
foo2.o
,或者没有链接,只需将它们组合成一个对象:

ld -r -o foo-combined.o foo1.o foo2.o
并且只给最终用户
foo combined.o


如果你想取得其他成就,请更清楚地重申你的问题。

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

extern int object_1_symbol;
int object_2_symbol;
在对象2中:

int object_1_symbol;
extern int object_2_symbol;

这将要求您将这些对象链接在一起,并阻止您将其与对象3链接在一起。它不是傻瓜式的,但它可能会为您的目的服务。

AFAIK没有办法让链接变得不可能。。。它们是否正常工作取决于其中一个如何使用另一个……您是否可以通过在obj1和obj3中定义相同的符号来执行某些操作?