2015-04-16 10 views
1

Мы используем встроенный верстак IAR для создания библиотек.Сборник IAR lmibrary: Удаление/скрытие внутренних символов и API-интерфейсов

При компиляции проекта с использованием этих библиотек мы сталкиваемся с проблемой: , если прикладной уровень реализует функцию с тем же именем, что и функция, определенная в библиотеке, при компиляции приложения сообщается об ошибке «повторное определение».

Чтобы избежать этого типа ошибки, я просто хочу знать, есть ли способ скрыть внутренние API, а также внутренние символы (глобальные переменные ...) скомпилированной библиотеки?

Спасибо заранее

ответ

0

Для внутренних функций и переменных, которые используются только в одном модуле компиляции, вы можете дать им внутреннюю связь с static ключевым словом:

/*library.c*/ 
static int internalLinkageVar; 
static void internalLinkageFunc(void); 

Это, конечно, не работать для символы, которые должны быть доступны для нескольких файлов .c в библиотеке. Для них лучше всего использовать префикс с бесконечно длинным символом на имя символа:

int MyLibrary_Private_Var2; 
void MyLibrary_Private_Func(void); 
+0

Нет ли лучшего способа сделать это, чем «Просто дать им более длинное имя»? Возможно частичное соединение с файлом рулевого управления? – TomE

+0

@TomE Я не вижу очевидного способа сделать частичную ссылку, но моя версия IAR сейчас немного устарела, и я, возможно, что-то пропустил, проскальзывая через руководство. Я стараюсь избегать использования функций, требующих дополнительной работы при переключении компиляторов, поэтому простое использование более длинного имени часто является наименьшим сопротивлением. – user694733

+0

@TomE Как обход; Предполагая, что вы не используете как приложение, так и функцию lib в одном модуле компиляции, вы можете изменить функцию приложения на более длинное имя, но используйте '# define', чтобы создать короткий псевдоним для локального использования. Не элегантный, но C не идеальный язык для начала. – user694733

 Смежные вопросы

  • Нет связанных вопросов^_^