Насколько я понимаю, глобальный объект будет существовать в обоих *.so, и это вызовет проблемы, поскольку функциональные символы в каждой общей библиотеке обращаются к разным глобальным переменным.
(Я ссылался на статическую библиотеку в командной строки при создании обеих общих библиотек, которые я использовал. Переключатели -Wl,--whole-archive и -Wl,-z,defs Таким образом, общая библиотека содержит символы статической библиотеки.)
Итак, вопрос:
- При связывании исполняемого файла, почему GCC/LD не сообщает об ошибке дублирования символов для этого случае?
- Означает ли это, что мы никогда не ссылаемся на одно и то же статическую библиотеку в общей библиотеке приложения и сам исполняемый файл?
Как Р Соха сказал, что у нас не должно быть статуса в статической библиотеке или мы должны предоставить общую библиотеку.
И я думаю, что это плохо и грустно иметь такое ограничение: Статическая библиотека не должно иметь статуса или должны быть предоставлены как общие библиотеки.
Причина:
1. Глобальная переменная широко используется, например, в моем случае это одноэлементный объект.
2. Статическая библиотека может быть предоставлена третьей стороной. И, возможно, пользователь также использует общую библиотеку, предоставленную другой третьей стороной, которая уже связала статическую библиотеку, например boost.
Подробнее здесь: https://stackoverflow.com/questions/244 ... te-symbols
Мобильная версия