Ссылка один на один в C

Есть ли способ реализовать связывание объектных файлов в C таким образом, что некоторые объекты могут быть связаны только друг с другом?

Например. Попытка связать Объект 1 и Объект 2 сработает и создаст рабочий исполняемый файл, но попытка связать Объект 1 и Объект 3 либо возвратит ошибку, либо полученный исполняемый файл будет работать неправильно.

Исходная информация: в основном, ситуация такова, что Программист А и Программист Б отправляют свои объекты компании-компоновщику. A и B хотят гарантировать, что компания-компоновщик может только связывать свои объекты вместе, а не связывать свои объекты с другими объектами программистов (например, программист C и т. Д.) (Поскольку это было бы незаконно).

Ответ Йоргена Сигвардссона полезен, но мне интересно, есть ли более надежный метод. Например. Если попытаться связать недопустимые объекты вместе с помощью gcc, компания Linker может определить, какие символы требуются, и просто добавить их к незаконным объектам, легко преодолевая ограничение.

3 ответа

Решение

Да, есть способ. В объекте 1:

extern int object_1_symbol;
int object_2_symbol;

И в объекте 2:

int object_1_symbol;
extern int object_2_symbol;

Это потребует от вас связать эти объекты вместе и не даст вам связать их вместе с объектом 3. Это не является доказательством, но может служить вашим целям.

Нет, нет никакого способа сделать то, что вы описали.

Если вы хотите убедиться, что программа либо связывает оба foo1.o а также foo2.oили ни один из них, просто объедините их в один объект:

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

и только дать конечному пользователю foo-combined.o

Если вы хотите достичь чего-то еще, пожалуйста, изложите свой вопрос более четко.

Другие вопросы по тегам