Как можно обнаружить/предотвратить несколько определений в статических библиотеках?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как можно обнаружить/предотвратить несколько определений в статических библиотеках?

Сообщение Anonymous »

Известно, что некоторые линкеры теперь сообщают о ошибках множественных определений, когда в статических библиотеках есть несколько определений. Смотрите, например, здесь: множественное определение в статической библиотеке или здесь: линкер не издает ошибку множественной определения, когда сосуществует один и тот же символ в файле объекта и статической библиотеки. < /P>
«Проблема» может быть легко воспроизведена. Как это: < /p>
file main1.cpp < /p>

Код: Выделить всё

#include 

int main()
{
std::cout 
#include 

int main()
{
std::cout 
g++ -c main1.cpp
ar rvs main1.a main1.o
g++ -c main2.cpp
ar rvs main2.a main2.o
g++ main1.a main2.a
./a.out
даст нет сообщения об ошибке , но вывод:

Код: Выделить всё

Hello, World 1!
Это может быть очень опасно, поскольку поведение программы не определена в соответствии с правилом Один определения: https://en.cppreference.com/w/cpp/language/definition. Если, например, приложение модульного тестирования создано из статических библиотек, которые содержат несколько определений важных функций, модульный тест может даже не проверить, что он должен проверить. < /P>
Конечно, настройка может быть исправлено путем удаления нескольких определений. Но это не предотвращает непреднамеренное повторное применение нескольких определений в будущем.
Есть ли способ автоматически обнаружить и/или предотвратить несколько определений в статических библиотеках и для будущего? п>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -prevented
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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