Mister_DSP
Jan 13 2017, 06:13
Добрый день.
Создаю библиотеку (lib) в Keil по исходникам из множества файлов.
Затем получившуюся библиотеку пристыковываю к другому проекту (главному).
При линковке выдаёт ошибку: найдены одинаковые имена в libfile.o и module.o
Исходные тексты программ не моего авторства, около 100 имён совпадает, так что переименовывать не вариант.
Пробовал static приписывать к библиотечным функциям, в итоге линковщик слинковывает функции из основной программы, а библиотечные пишет что объявлена, но неиспользуется.
Вопрос вот в чём: как изолировать функции библиотеки, чтоб они не выпирали в основном проекте, чтобы можно было использовать одинаковые имена?
Может флаг компилятора/линковщика есть - по умолчанию все имена делать невидимыми?
Mister_DSP
Jan 13 2017, 13:40
Всё закончилось тем, что файлы библиотеки (c- h-) были проинклудены в одном main.c и с небольшими доработками скомпилировались....
А вот как ограничить видимость имён в пределах одной статической библиотеки - не нашёл.
Читал про __attribute__(visible("hidden")), namespaces всякие - не помогло!
Valentine Loginov
Jan 14 2017, 06:51
ИМХО, лучше свои все-таки нормально переименовать и/или ограничить область видимости для своих сущностей.
В случае совпадения имён в подключенной библиотеке делаю что-то вроде:
Код
#define timeval cyclone_timeval
#include <cyclone_tcp/core/bsd_socket.h>
#undef timeval
Mister_DSP
Jan 18 2017, 13:51
Цитата(Valentine Loginov @ Jan 14 2017, 07:51)

В случае совпадения имён в подключенной библиотеке делаю что-то вроде:.....
Спасибо! Помогло!
Дефайнами переименовал все функции, которые перекрывались!