kolibrios/programs/develop/ktcc/trunk/bin/doc/ru/How to use.txt
turbocat 0e9c10036a ktcc set kx folder as bin
git-svn-id: svn://kolibrios.org@9663 a494cfbc-eb01-0410-851d-a64ba20cac60
2022-01-24 17:01:24 +00:00

98 lines
4.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Быстрый старт
Для использования новых возможностей предоставляемых расширением 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
...