Tiny C Compiler
-
Считаю, что пока это не приоритетно.
Привет!
Обновил на svn последнюю версию, в т.ч. исправлена ошибка при задании неиспользуемых библиотек, добавлены доки, библиотеки.
К сожалению, в дистрибутив сейчас многое не попадает (кроме самого tcc и tcc.conf) нужно это будет настроить позже.
Для тестирования для понимания что должно быть в папке tcc ориентируйтесь на архив, который выкладывал выше.
Обновил на svn последнюю версию, в т.ч. исправлена ошибка при задании неиспользуемых библиотек, добавлены доки, библиотеки.
К сожалению, в дистрибутив сейчас многое не попадает (кроме самого tcc и tcc.conf) нужно это будет настроить позже.
Для тестирования для понимания что должно быть в папке tcc ориентируйтесь на архив, который выкладывал выше.
В TCC баг замечен:
Если использовать преобразование типов с плавающей запятой в целочисленный, то скомпилированная программа будет вылетать (в Board->Kernel видно).
Пример кода:
Если использовать преобразование типов с плавающей запятой в целочисленный, то скомпилированная программа будет вылетать (в Board->Kernel видно).
Пример кода:
Code: Select all
float a = 3.14f;
int b = (int)a;
Привет!
Собралось без проблем (архив в приложении). Возможно криво прилинковалась библиотека tcc. Используй вариант из дистрибутива, но в файле tcc.conf надо раскомментировать строку "tcc_root kx"
Собралось без проблем (архив в приложении). Возможно криво прилинковалась библиотека tcc. Используй вариант из дистрибутива, но в файле tcc.conf надо раскомментировать строку "tcc_root kx"
- Attachments
-
-
f2i.7z (1.96 KiB)Downloaded 104 times
-
Спасибо за ответ. Интересно получилось: я сравнил мой и твой вариант, и выходит, что необходимо сначала указать "-ltcc" и только потом "-lc.obj". Тогда все работает, как надо (даже что-то менять в tcc.conf не пришлось). Если же сделать наоборот, то будет возникать описанная мной ошибка.Coldy wrote:Привет!
Собралось без проблем (архив в приложении). Возможно криво прилинковалась библиотека tcc. Используй вариант из дистрибутива, но в файле tcc.conf надо раскомментировать строку "tcc_root kx"
(libc.obj пришлось подключать для printf)
От разницы указаний библиотек не должно быть проблем - это вляет только на то в каком порядке они будут следовать в коде. Я к сожалению вижу только часть контекста твоей проблемы, возможно, проблема вовсе не в tcc, и даже не в порядке подключения библиотек. Например, текущий формат приложений позволяет легко затереть/перезаписать к.л. участок кода с помощью другой ошибки в коде - отловить это очень сложно.
Да, tcc.conf пока лучше не править, т.к. CLAYER еще не переделан, но в дальнейшем библиотеки будут использоваться те, которые в папке kx/lib.
Да, tcc.conf пока лучше не править, т.к. CLAYER еще не переделан, но в дальнейшем библиотеки будут использоваться те, которые в папке kx/lib.
Все то же самое, как и в твоем архиве. Но замени в скрипте билда "-ltcc" на "-lc.obj -ltcc". А в коде выведи полученное число:Coldy wrote:От разницы указаний библиотек не должно быть проблем - это вляет только на то в каком порядке они будут следовать в коде. Я к сожалению вижу только часть контекста твоей проблемы, возможно, проблема вовсе не в tcc, и даже не в порядке подключения библиотек. Например, текущий формат приложений позволяет легко затереть/перезаписать к.л. участок кода с помощью другой ошибки в коде - отловить это очень сложно.
Да, tcc.conf пока лучше не править, т.к. CLAYER еще не переделан, но в дальнейшем библиотеки будут использоваться те, которые в папке kx/lib.
Code: Select all
#include <stdio.h> //в начале
printf("%d", b); // в конец main()
В итоге будет:
Компиляция (из папки с исходником):
Code: Select all
#include <stdio.h>
int main() {
float a = 3.14f;
int b = (int)a;
printf("%d", b);
}
Code: Select all
/kolibrios/develop/tcc/tcc main.c -o a.kex -lc.obj -ltcc
Да, с использованием старой версии libc.obj.a (-lc.obj) ошибка появляется, как ты описал. Как уже писал ранее, libc.obj.a вскоре будет устаревшей.
Подключи tcc.conf, как я описал выше.
запусти tcc с ключом -vv, путь к библиотекам должен быть "/kolibrios/develop/tcc/kx/lib"
затем используй сборку так
Можешь менять библиотеки местами, все будет работать нормально.
И просьба не использовать оверквоттинг без надобности, нажимай кнопку "Ответить", вместо "Цитата"
Подключи tcc.conf, как я описал выше.
запусти tcc с ключом -vv, путь к библиотекам должен быть "/kolibrios/develop/tcc/kx/lib"
затем используй сборку так
Code: Select all
/kolibrios/develop/tcc/tcc main.c -o a.kex -llibc -ltcc
И просьба не использовать оверквоттинг без надобности, нажимай кнопку "Ответить", вместо "Цитата"
Last edited by Coldy on Thu Jan 06, 2022 10:32 pm, edited 1 time in total.
Так, я понял в чем проблема. Программа вылетает из-за того что у функции pfintf некорректный указатель (в примере с ошибкой он 0x318 чего быть по определению не может, правильный в мом случае - 0x7004D66B). Видимо старый загрузчик чувствителен к порядку указания библиотек - это еще один повод отказаться от этого метода.
Я тут поколдовал... Coldy, может сделать формат KX дефолтным для tcc в самом дистре? Нужные изменения я произвёл на своём пк, автособираемые проги не пострадают. Вот так tcc в дистре будет. Ты согласен?
PS:
Смысла два способа сборки держать в дистре не вижу. + Новички как видно путаются...
И давай решим уже с автолинковкой libtcc1.a(да я дурачёк эта либа именно так называется а не libtcc.a), lc.def и crt0.asm. Опять же автосборке ничего не будет.
__
Я думаю этого будет достаточно или не? Помню ты говорил пока не сделаем __attribute__((dllimport)) добавлять не будем почему то. Или я что то путаю.
PS:
Смысла два способа сборки держать в дистре не вижу. + Новички как видно путаются...
И давай решим уже с автолинковкой libtcc1.a(да я дурачёк эта либа именно так называется а не libtcc.a), lc.def и crt0.asm. Опять же автосборке ничего не будет.
__
Я думаю этого будет достаточно или не? Помню ты говорил пока не сделаем __attribute__((dllimport)) добавлять не будем почему то. Или я что то путаю.
Code: Select all
tcc_add_crt(s,"crt0.o");
tcc_add_library_err(s, "c");
tcc_add_library_err(s, "tcc1");
- Attachments
-
-
tcc.zip (379.07 KiB)Downloaded 108 times
-
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Кста самое главное! Разработка tcc достаточно живая по этому я наверное попрошу чтобы Xvilka починил gcc на серваке. Каждый раз просить обновлять tcc как то не камельфо.
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Привет!
1) Перенастроить дистрибутив c samples, чтобы примеры собирались по-новому. На этом этапе tcc.conf пока останется. Дополнительно временно сделаю, чтобы корневая папка include также автоматом цеплялась (чтобы ее не задавать в скрипте), т.к. корень меняется на %tcc_root%/kx/lib и include ищется там (а на самом деле от в папке %tcc_root%, т.е. на уровень выше). Старая папка lib пока останется. И да, в CLAYER пока надо оставить функции типа kolibri_boxlib_init. Так не будет проблем с автосборкой.
2) Перенастроить все в приложениях автосборки и залить новый tcc на сервер. Возможно этот этап придется разбивать на подэтапы.
Я в целом согласен, но это еще большая работа, т.к. нужно править все оставшиеся заголовки, например, mbedtls, т.к. сейчас вызов внешних функций из библиотек происходит по указателю. Но учитывая, что я планирую сделать, чтобы вызовы были как функции (с помощью __attribute__((dllimport))), то сейчас это будет двойная работа. По этой же причине mbedtls.def предлагаю пока убрать.сделать формат KX дефолтным для tcc в самом дистре?
Тут тоже согласен. Тем более что старый способ ненадежный.Смысла два способа сборки держать в дистре не вижу. + Новички как видно путаются
Ок, добавлю, только надо будет поправить еще все скрипты сборки (чтобы эти библиотеки не фигурировали дважды). А почему название название libtcc не можем оставить, зачем еще 1 в конце?libc.def я так понял тоже меняем на lc.def?давай решим уже с автолинковкой libtcc1.a, ... lc.def и crt0.asm
Тут не уверен, нужно внести все изменения сразу - это большая работа. Самое главное, чтобы автосборка не встала. Поэтому и предлагаю делать все поэтапно:автособираемые проги не пострадают
1) Перенастроить дистрибутив c samples, чтобы примеры собирались по-новому. На этом этапе tcc.conf пока останется. Дополнительно временно сделаю, чтобы корневая папка include также автоматом цеплялась (чтобы ее не задавать в скрипте), т.к. корень меняется на %tcc_root%/kx/lib и include ищется там (а на самом деле от в папке %tcc_root%, т.е. на уровень выше). Старая папка lib пока останется. И да, в CLAYER пока надо оставить функции типа kolibri_boxlib_init. Так не будет проблем с автосборкой.
2) Перенастроить все в приложениях автосборки и залить новый tcc на сервер. Возможно этот этап придется разбивать на подэтапы.
Вот патч для tcc. Что тут есть:
1. Удалён мой костыль undef_sym_flag. (Coldy кажется это пофиксил);
2. Добавлен автолинк libc.def и libtcc1.a(+ подправлен линк crt0.o);
3. Если символы из crt0.o ненайдены, вызывает ошибку сборки;
4. tcc теперь находит crt0.o при использовании параметра -B.
1. Удалён мой костыль undef_sym_flag. (Coldy кажется это пофиксил);
2. Добавлен автолинк libc.def и libtcc1.a(+ подправлен линк crt0.o);
3. Если символы из crt0.o ненайдены, вызывает ошибку сборки;
4. tcc теперь находит crt0.o при использовании параметра -B.
- Attachments
-
-
tcc_source.diff (4.33 KiB)Downloaded 103 times
-
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Два вопроса:
1. tcc собирает сам себя?
2. Кодовая база для Колибри и линукс версии для кросскомпиляции одна и таже?
1. tcc собирает сам себя?
2. Кодовая база для Колибри и линукс версии для кросскомпиляции одна и таже?
to infinity and beyond
Who is online
Users browsing this forum: No registered users and 9 guests