Ссылка один на один в 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
Если вы хотите достичь чего-то еще, пожалуйста, изложите свой вопрос более четко.