О написании собственной библиотеки си

Заголовочные файлы в GCC

Стандартные пути для поиска заголовков это

  1. путь-установки/include/ (пользовательские заголовки) и
  2. путь-установки/sys-include/ (системные заголовки).

В принципе все заголовочные можно ставить в include/, но есть один нюанс. GCC предоставляет свой собственный файл limits.h, а так как собственные пути поиска GCC ставит выше прочих, то кажется, что его можно подменить только грязным хаком. Но в GCC есть механизм подмены. При сборке GCC смотрит на наличие limits по второму пути, и если он там есть, правит при установке свой limits.h так, что он вызывает системный. Таким образом, чтобы механизм успешно сработал, необходимо положить limits.h в sys-include/ и пересобрать (полностью) GCC.

Библиотеки в 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.

cifra/o_napisanii_sobstvennoj_biblioteki_si.txt · Последние изменения: 2012/11/28 17:14 — vovanium
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 3.0 Unported