Похоже, что компоновщик GCC не заботится о том, чтобы одна переменная определялась в двух файлах. Я подозреваю, что это причина проблемы, которую вызывает нас сторонняя библиотека.Обнаружение повторяющихся определений переменной в общей библиотеке
Отнесите:
Файл a.cpp содержит:
int foo;
//do things with it.
Файл b.cpp содержит:
int foo;
//do other things with it.
Файл c.cpp содержит:
extern int foo;
//do other things with it.
Все они составлены gcc для .o, а затем связаны как общий объект.
gcc -fPIC -c a.cpp
gcc -fPIC -c b.cpp
gcc -fPIC -c c.cpp
ld *.o -shared -soname,mylib -o mylib
Компонент не жалуется вообще, но результирующие двоичные ошибки. Мы подозреваем, что существует по крайней мере несколько конфликтов такого рода и они хотели бы найти их. Какие варианты компоновщика позволят нам их обнаружить?
(интересно, если переменные инициализированы (int foo=0
) в обоих файлах, это приводит к ошибке).
Согласен, часто да. Иногда понимание мотивов оригинальных авторов дает мне головную боль. Иногда бывает, что он статичен, иногда нужно быть внешним, и так далее. –