Что такое «СТАНДАРТНЫЕ СИСТЕМНЫЕ КАТАЛОГИ», на которые ссылается g cc? (В unix подобной системе) - PullRequest
0 голосов
/ 17 апреля 2020

Я изучал компиляторы и кросс-компиляторы. Я читаю инструкцию G CC. В частности, в руководстве есть следующие утверждения, которые у меня есть:

Компоновщик ищет стандартный список каталогов для библиотеки. В число найденных каталогов входит несколько стандартных системных каталогов, а также любые, которые вы указываете с помощью -L

Опции -isystem и -idirafter также помечают каталог как системный каталог, так что он получает ту же специальную обработку, которая применяется к стандартным системным каталогам.

Хорошо, что это за "системные каталоги"? На Linux машине, каковы системные каталоги для собственного компилятора?

И если я построил кросс-компилятор (как показано здесь: https://wiki.osdev.org/GCC_Cross-Compiler), Что такое «системные каталоги» по отношению к этому компилятору?

Могу ли я изменить системный каталог при сборке G CC? Кроме того, где sys root входит в картину?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

G CC - ничто, если не настраивается.

Когда вы создаете экземпляр G CC, вам необходимо полностью указать целевую среду. (К счастью, большая часть этого уже была сделана для вас.) При необходимости вы можете настроить любой из этих параметров перед выполнением сборки. Настройки подробно описаны в руководстве по внутренним компонентам G CC, но конкретные, которые вас интересуют, находятся в главе, описывающей Target Macros , и, в частности, в разделе Управление драйвером компиляции . В этом последнем разделе вы найдете описания различных макросов, которые определяют пути включения. (Ищите слово «включить» на этой странице. Прочитайте все, что вы найдете :-); G CC документация не является учебником.)

0 голосов
/ 17 апреля 2020

«Стандартные» системные каталоги не являются указанными c каталогами - они могут различаться в зависимости от установки / распространения.

gcc имеет опцию -print-search-dirs. С помощью которого вы можете получить список каталогов, он ищет.

Что-то вроде:

gcc -print-search-dirs | grep libraries | sed 's/libraries: =//g' | tr ':' '\n' | xargs readlink -f 

То же самое относится и к кросс-компилятору (вместо этого вы бы назвали интерфейс кросс-компилятора gcc).

--sysroot является простым:

- sysroot = dir Использовать dir в качестве логического каталога root для заголовков и библиотеки. Например, если компилятор обычно ищет заголовки в / usr / include и библиотеки в / usr / lib, он вместо этого ищет dir / usr / include и dir / usr / lib.

Если вы используете оба эти параметра и параметр -isys root, затем параметр --sys root применяется к библиотекам, а параметр -isys root применяется к заголовочным файлам.

Компоновщик GNU (начиная с версии 2.16) имеет необходимую поддержку для этой опции. Если ваш компоновщик не поддерживает эту опцию, аспект заголовочного файла --sys root все еще работает, но аспект библиотеки - нет.

...