forked from KolibriOS/kolibrios
0e9c10036a
git-svn-id: svn://kolibrios.org@9663 a494cfbc-eb01-0410-851d-a64ba20cac60
98 lines
4.0 KiB
Plaintext
98 lines
4.0 KiB
Plaintext
|
||
Быстрый старт
|
||
Для использования новых возможностей предоставляемых расширением KX
|
||
необходимо использовать файл конфигурации tcc.conf в папке где расположен tcc
|
||
|
||
Этот файл перенастраивает директорию %ktcc_root%\ на %ktcc_root%\kx.
|
||
|
||
В данной директории присутствует папка lib с файлами
|
||
*.def, crt.0 и libtcc.a
|
||
|
||
Во избежание конфликтов бибилиотек с использованием возможностей
|
||
предоставляемых расширением KX рекомендуется использовать только одну
|
||
директорию с библиотеками. Если определено несколько директорий библиотек,
|
||
в каждой из них не должно быть конфликтных библиотек. Например,
|
||
при таком подключении библиотеки
|
||
|
||
-llibc
|
||
|
||
tcc ищет файлы в следующем порядке: libc.def, liblibc.def, liblibc.a
|
||
Обратите внимание, что все три варианта будут правильными и будет использован
|
||
первая найденная бибилиотека. Также обратите внимание, что для корректной
|
||
работы приложения с расширением KX все динамические библиотеки должны быть
|
||
обработаны только с *.def
|
||
|
||
В остальном tcc используется как обычно (см. справку tcc)
|
||
Примечание:
|
||
ключ -nobss был удален, так как он не имеет смысла (ранее генерировавшаяся
|
||
bss секция заполнялась нулями и занимала ненужное место в файле, эта секция
|
||
не должна содержаться в образе и ядро инициализирует эту часть нялями
|
||
автоматически при загрузке)
|
||
|
||
Файлы определения символов
|
||
Расширение KX использует файлы определений символов (*.def). Файлы *.def
|
||
используют простой формат и могут создваться и редактироваться в любом
|
||
удобном текстовом редакторе. Структура файла *.def описана ниже.
|
||
|
||
; Комментарии начинаются точкой с запятой и игнорируются при обработке
|
||
;
|
||
; Первая строка должна начинаться с ключевого слова LIBRARY с указанием
|
||
; имени библиотки c расширением (не более 3 симоволов после точки)
|
||
LIBRARY libname.obj
|
||
|
||
; На следующей строке следует ключевое слово EXPORTS и
|
||
; опциональный ключ prefix
|
||
EXPORTS [prefix]
|
||
|
||
; если задан ключ prefix, то во всех символах должен использоваться
|
||
; префикс из имени библиотеки (без расширения) со следующим за ним символом
|
||
; подчеркивания. Префикс будет отброшен при постоении таблицы импорта
|
||
; Например, для библиотеки http.obj префикс должен быть http_
|
||
; из символа http_get в таблицу импорта будет записан символ get
|
||
[libname_]entry1
|
||
[libname_]entry2
|
||
|
||
; все остальные символы библиотеки
|
||
|
||
Проверка поддержки расширения KX
|
||
Для проверки, что tcc поддерживает расширение KX:
|
||
1. в командной строке наберите
|
||
tcc -v
|
||
Строка ниже означает, что имеется поддерка расширения KX
|
||
tcc version 0.9.26 (i386 KolibriOS/KX extension)
|
||
|
||
2. В коде для условной компиляции используйте директивы препроцессора
|
||
проверки предопределенного макроса __KX__, например
|
||
#ifdef __KX__
|
||
// код который должен компилироваться только с расширением KX
|
||
#else
|
||
// код, который не зависит от расширения KX
|
||
#endif
|
||
|
||
Обратите внимание, что в настоящее всемя этот макрос показывает, что
|
||
компилятор поддерживает расширение KX. По умолчанию этот макрос будет
|
||
определен всегда, даже если Вы по каким то причинам не желаете
|
||
использовать новые преимущества. При использовании текущих
|
||
особенностей разделять код описанным в примере выше способом в
|
||
большинстве случаев не требуется.
|
||
|
||
Обеспечение совместимости
|
||
Если для обеспечения совместимости необходимо отделить код, чтобы его можно
|
||
было использовать как с расширением KX, так и без него, Вы можете определить
|
||
дополнительный макрос и таким образом разделять код на нужные участки,
|
||
например. Настоятельно рекомендуется использовать только код с поддержкой
|
||
расширения KX.
|
||
|
||
...
|
||
|
||
#ifdef _C_LAYER
|
||
// Код который выполняется без поддержки расширения KX
|
||
/ использующий старый метод загрузки
|
||
if(!kolibri_libimg_init()){ // Загружаем libimg.obj
|
||
notify_show("Libimg.obj not loaded!' -E");
|
||
exit(0);
|
||
}
|
||
#endif
|
||
|
||
...
|
||
|