C компилятор / компоновщик - Как скрыть внутренние символы библиотеки c - PullRequest
0 голосов
/ 28 марта 2020

МОЯ ЦЕЛЬ: для компиляции библиотеки stati c (обычно расширение .a) и скрытия внутренних символов (имена функций и переменных) при открытии файла библиотеки в текстовом редакторе.

В настоящее время я работаю на компиляторе XC32 компании Microchip Technology, который делает хорошо известные микроконтроллеры PI C.

На самом деле я не могу поделиться здесь своей библиотекой, но я создал очень простой сделать тесты. C только исходный код:

int variable;

int sum (int a, int b) 
{
    return a+b;
}

и только заголовок:

int sum (int a, int b);

Создан проект библиотеки в IDE mplabX и выбран компилятор XC32. В свойствах проекта отображаются следующие параметры:

enter image description here Я изменил эти параметры:

  • xc32-as -> Иметь символы в производственной сборке. снят с отметки
  • xc32-g cc -> Наличие символов в производственной сборке. снимите флажок
  • xc32-ld -> Символы и макросы -> Символы. Выбранный параметр «удалить всю информацию о символах»

Затем скомпилирован. Библиотека (расширение .a) создана. Я открыл его с помощью текстового редактора и увидел, что символы еще отображаются:

enter image description here

Для каждого из разделов компилятора (xc32-as, xc32 -g cc, xc32-ld et c), есть поле «Дополнительные параметры».

Я пытался ввести эти параметры, но никто не работал, чтобы скрыть символы:

  • -видимость = скрыто на г cc и ld
  • -видимость = скрыто на g cc и strip -r -S -x на ld

Если I , попробуйте strip -r -S -x на г cc Я получаю:

  • pic32m-g cc .exe: ошибка: strip: Нет такого файла или каталога

  • pic32m-g cc .exe: ошибка: отсутствует аргумент для '-x'

Затем я удалил дополнительные параметры для ld и g cc, поместив "stati *" 1098 * "перед переменной и функцией, а C источник становится:

static int variable;

static int sum (int a, int b) 
{
    return a+b;
}

При этом (добавляя stati c перед всеми), символ S правильно скрыты. Но с другой стороны, я не могу использовать библиотеку, прикрепленную к моему проекту приложения, потому что, когда компилятор показывает «неопределенную ссылку» на функции библиотеки. Это связано с тем, что: [из Википедии] В языке программирования C stati c используется с глобальными переменными и функциями для установки их области видимости в содержащем файле.

Тогда как мне достичь своей цели? в этом случае? (первая фраза топи c). С уважением.

РЕДАКТИРОВАТЬ: Это показано в свойствах проекта в IDE, я компилирую его.

enter image description here

Все внутренние символы отображаются в нижней части файла lib, где указано имя файла c, только в этом месте отображается c имя файла

...