У меня есть рабочая библиотека C, которую я хочу связать с приложением C ++, используя gcc, но компоновщик (g ++) выдает мне ошибку «множественное определение». С приложением C и gcc это работает.
Все заголовки, определяющие интерфейс, содержат:
#ifdef __cplusplus
extern "C" {
#endif
Я проверил библиотеку с помощью команды "nm", и у нее есть несколько определений метода (данный метод не из открытого интерфейса).
Мои вопросы:
Почему в моей библиотеке несколько определений (некоторые имеют T, а другие U)?
Почему это работает, если приложение, включая файл, является приложением C (я использую -Wall для сборки)?
Нужен ли мне какой-либо специальный атрибут или использовать определенное расширение файла, чтобы он работал, или мне нужно вернуться в школу программирования :)?
Обращая больше внимания на файл lib.a, я вижу, что один из объектов включен дважды. Например, у меня есть два раздела для одного и того же объекта:
obj1.o
00000000 T Method
obj2.o
00000000 T Hello
obj1.o
00000000 T Method
Полагаю, в этом проблема?
Любая помощь очень ценится.