Стандартные пути для поиска заголовков это
/include/
(пользовательские заголовки) и
/sys-include/
(системные заголовки).
В принципе все заголовочные можно ставить в include/
, но есть один нюанс. GCC предоставляет свой собственный файл limits.h
, а так как собственные пути поиска GCC ставит выше прочих, то кажется, что его можно подменить только грязным хаком. Но в GCC есть механизм подмены. При сборке GCC смотрит на наличие limits по второму пути, и если он там есть, правит при установке свой limits.h
так, что он вызывает системный. Таким образом, чтобы механизм успешно сработал, необходимо положить limits.h
в sys-include/
и пересобрать (полностью) GCC.
Тут следует начать с того, что GCC имеет в себе механизм Multi-Lib (далее Мультилиб), который позволяет иметь несколько библиотек, собранных с разными ключами компиляции. В любом случае все библиотеки будут располагаться по пути
/lib/
Но при включённом Мультилибе в директории lib будут присутствовать подкаталоги, в которые будут складываться соответствующие библиотеки. Узнать о значении подкаталогов можно дав команду
gcc -print-multi-lib
Если используется кросс-компилятор, то gcc
надо заменить соответствующим. При этом, если Мультилиб действительно включён (это определяется при сборке GCC), будет выведен примерно такой список:
.; thumb;@mthumb fpu;@mfloat-abi=hard be;@mbig-endian fpu/be;@mfloat-abi=hard@mbig-endian thumb/thumb2;@mthumb@march=armv7 thumb/be;@mthumb@mbig-endian thumb/thumb2/be;@mthumb@march=armv7@mbig-endian
Он содержит названия поддиректорий и наборы ключей, которые используются при сборке соответствующей версии. Например, строку thumb/thumb2;@mthumb@march=armv7
Следует интерпретировать так: в директории thumb/thumb2
лежат библиотеки, собранные с ключами –mthumb –march=armv7
.