Почему gcc не сообщает об ошибке при следующих повторяющихся символах?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему gcc не сообщает об ошибке при следующих повторяющихся символах?

Сообщение Anonymous »

Я работаю над Ubuntu Linux, чтобы создать двоичный файл Android и Linux. У меня есть статическая библиотека, которая связана двумя общими библиотеками, и в статической библиотеке есть глобальный объект.

Насколько я понимаю, глобальный объект будет существовать в обоих *.so, и это вызовет проблемы, поскольку функциональные символы в каждой общей библиотеке обращаются к разным глобальным переменным.

(Я ссылался на статическую библиотеку в командной строки при создании обеих общих библиотек, которые я использовал. Переключатели -Wl,--whole-archive и -Wl,-z,defs Таким образом, общая библиотека содержит символы статической библиотеки.)

Итак, вопрос:
  • При связывании исполняемого файла, почему GCC/LD не сообщает об ошибке дублирования символов для этого случае?
  • Означает ли это, что мы никогда не ссылаемся на одно и то же статическую библиотеку в общей библиотеке приложения и сам исполняемый файл?
--------------- --Редактировать 1-----------------------

Как Р Соха сказал, что у нас не должно быть статуса в статической библиотеке или мы должны предоставить общую библиотеку.

И я думаю, что это плохо и грустно иметь такое ограничение: Статическая библиотека не должно иметь статуса или должны быть предоставлены как общие библиотеки.

Причина:
1. Глобальная переменная широко используется, например, в моем случае это одноэлементный объект.
2. Статическая библиотека может быть предоставлена ​​третьей стороной. И, возможно, пользователь также использует общую библиотеку, предоставленную другой третьей стороной, которая уже связала статическую библиотеку, например boost.

Подробнее здесь: https://stackoverflow.com/questions/244 ... te-symbols
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»