Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Apr 25, 2019 7:16 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 65 posts ]  Go to page Previous 1 2 3 4 5 Next
Author Message
PostPosted: Sun Feb 13, 2011 5:58 pm 
Offline

Joined: Thu Nov 25, 2010 8:26 pm
Posts: 41
Sorcerer wrote:
Файл freetype.a лежит в $(MENUETDEV)/lib

Нужно задать еще путь к библиотеке
Code:
-L$(MENUETDEV)/lib


Хотя... Этот путь наверное в mld прописан. Можно еще переименовать библиотеку в libfreetype.a


Top
   
PostPosted: Sun Feb 13, 2011 6:16 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Спасибо... Помогло. Не заметил, что имя неправильное у файла.
теперь все так же, как с другими примерами menuetlibc, подключающими библиотеки:
/home/sourcerer/projects/me/lib/libc.a(remove.o): In function `remove':
remove.c:(.text+0x9a): undefined reference to `__stack_chk_fail'

И не линкуется. Интересно, это исправлял уже кто-нибудь, или нет? menuetlibc у меня один из последних, насколько я понимаю, потому что в нем есть упоминания о Колибри, а не только о menuet... И в каком направлении ковырять? Скомпилированную menuetlibc от Asper'а использовать не могу, потому что у меня не mingw и не cygwin...


Top
   
PostPosted: Mon Feb 14, 2011 1:32 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1619
Sorcerer, Яндекс советует добавить -fno-stack-protector к опциям компиляции. Опции компиляции можно добавить - на выбор - в исходном тексте mgcc или в osrules.mak, с учётом того, что и там, и там есть две ветки, срабатывающие в разных случаях.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Mon Feb 14, 2011 9:30 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
CleverMouse wrote:
Sorcerer, Яндекс советует добавить -fno-stack-protector к опциям компиляции. Опции компиляции можно добавить - на выбор - в исходном тексте mgcc или в osrules.mak, с учётом того, что и там, и там есть две ветки, срабатывающие в разных случаях.

Спасибо большое! Я думал, это я такой идиот или неудачник, поэтому и не искал в поиске... Добавление опции не помогло, а вот другие советы, кажется, помогли. Например, совет создать dummy-функцию __stack_chk_fail(void) помог скомпилировать те тесты, которые у меня раньше не компилировались, и они работают. А моя простая программка - нет, библиотека все-таки собралась неправильно, и дело в параметрах сборки, потому что, как выяснилось, некоторые o-файлы включились в архив несколько раз (ума не приложу, как так получилось).
Но, кажется, собрать freetype для Колибри гораздо более реально, чем я предполагал, и, судя по всему, гораздо быстрее, чем изобретать свой велосипед.
Конечно, это уже делали до меня, и не раз. И все же я надеюсь, что смогу довести все до ума.


Top
   
PostPosted: Mon Feb 14, 2011 10:42 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Sorcerer, это отлично! Всячески желаю успехов, и в своей разрабатываемой программе обязательно сделаю поддержку таких векторных шрифтов (BGI уже используются и работают, но тормознуты и некрасивы). Нужна будет помощь (кроме как с Си, и компиляцией из него), буду рад помочь (в том же тестировании, например)

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Mon Mar 28, 2011 10:58 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Шрифты, шрифты... Наконец собрал freetype 1.3.1 по-человечески. Линкуется статически. Проверял только на ftstrpnm - генерирует pnm-изображение с текстом про лису и ленивого пса по данному шрифту (брал Libertation Mono).


Attachments:
freetype.7z [31.24 KiB]
Downloaded 125 times
Top
   
PostPosted: Mon Mar 28, 2011 11:19 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Результат выглядит вот так:
Attachment:
render.png
render.png [ 668 Bytes | Viewed 2969 times ]


Поддерживаются сглаживание, пиксель-хинтинг и всё такое. Бинарник в сжатом виде занимает 50 килобайт, а файл шрифта, который я использовал (Libertation Mono, с поддержкой русского и английского) - около 110 килобайт. Имеется поддержка арабского, но нет поддержки японского и китайского.
В теории на флоппик влезет, если потеснить игрушки и всё такое. (FreeType2, кажется, потяжелее будет)

UPD: русский поддерживается в теории. На практике вывести строку на русском мне не удалось. Пробовал передавать UTF-8, CP-1251, CP-1252 и IBM866-строки, все равно :( Пойду читать мануалы.

Вопрос к знатокам: есть ли возможность сделать COFF-библиотеку с использованием gcc, и если да, то как?


Top
   
PostPosted: Mon Mar 28, 2011 2:32 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Sorcerer

Для этого надо компилировать все файлы в один (опция -combine).


Top
   
PostPosted: Mon Mar 28, 2011 3:12 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
А можно какую-нибудь рыбу, чтобы было понятно, что и как? Файл у меня и так один объектный.


Top
   
PostPosted: Mon Mar 28, 2011 3:17 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Посмотри svn://kolibrios.org/programs/develop/libraries/pixlib
Обязятельные "START" и "VERSION", остальное - твои функции.

Gcc любит добавлять в объектники отладочную информацию. Надо внимательно смотреть опции компиляции.


Top
   
PostPosted: Mon Mar 28, 2011 11:32 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Ковыряюсь с обертками для функций freetype. Текущая версия библиотеки (1.3.1) в kpack-ованном виде занимает около 26 килобайт, но, судя по всему, скоро размер на несколько килобайт увеличится. Пока что она лишь выводит свою версию, и создает TT_Engine, поэтому не вижу смысла ее выкладывать сюда. Как только эта штуковина взлетит, так сразу и выложу. Впереди неделька-другая свободного времени, и есть большие шансы на то, что за это время я успею всё допилить.

Выводить текст с помощью freetype можно будет так же просто, как, например, использовать box_lib. Нужно лишь загрузить библиотеку, импортировать нужные функции, загрузить файл шрифта, передать функциям указатели на файл шрифта, текст и область памяти для вывода, и всё.

Благодарности:
Spoiler: Show
Радует, что newlib, судя по всему, хорошо соответствует стандартам ANSI C - почти никаких правок исходного кода самой freetype делать не пришлось. Отдельное спасибо Serge за работу!
А еще спасибо всем, кто помогает Колибри! ;)


Top
   
PostPosted: Tue Mar 29, 2011 11:50 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Библиотека freetype 1.3 для Колибри. Тепленькая, только что из компилятора и линковщика.
Attachment:
kolibri-freetype-1.3.7z [93.33 KiB]
Downloaded 123 times

В архиве лежат: библиотека (dll), файл для линковки с исходным кодом (libfreetype.a), шрифт Libertation (какой под руку попался из linux) и тестовая программа ftpnm.kex.

Что со всем этим делать обычному пользователю?
1) Понадобится архив amz из темы про newlib.
2) Нужно скопировать libc.obj в /rd/1/lib/ (придется часть файлов с рамдиска удалить скорее всего),
3) В файл system.env прописать правильные пути к файлам библиотек,
4) Затем скопировать этот файл в /rd/1/.
5) После этого открываем доску отладки, и закрываем (в Колибри нет pipes, и stdout идет на доску отладки, так что чистый файл boardlog.txt не повредит).
6) Затем открываем доску отладки вновь и
7) Запускаем ftpnm.kex из папки со шрифтом. Если всё хорошо - на доске появится сообщение "P4" и еще несколько цифр. Если всё плохо - то подробно будет рассказано, чего не хватает (библиотеки, шрифта, или благоприятной фазы луны). Будем надеяться, что всё хорошо.
8) Если всё действительно хорошо, то можно закрывать доску отладки и смотреть на файл /rd/1/boardlog.txt. Если никаких лишних сообщений на доску отладки не приходило, то boardlog.txt можно переименовать в файл с расширением pnm, скопировать его на жесткий диск или флешку, и затем просмотреть в каком-нибудь графическом просмотрщике.
9) После всего этого можно порадоваться, что freetype теперь работает в Колибри, и его можно использовать в любых программах.

А как писать программы с использованием freetype?
Для этих целей я использую mingw, fasm, заголовочные файлы freetype 1.3 (взять их можно из архива с официального сайта freetype), порт newlib (файлы amz-dev из темы про newlib, а так же заголовочные файлы с SVN) и свою голову.
Код пишу в строгом соответствии с freetype api reference (разумеется, этот файл тоже есть в том же архиве), затем компилирую и линкую так, как это описано в теме про newlib:
i586-mingw32msvc-gcc -c *.c -fomit-frame-pointer -I include/ -D__DYNAMIC_REENT__ -O2
i586-mingw32msvc-ld -nostdlib -pie -s -T pe_app.lds --image-base 0 --stack 0x100000 -Map test.map ftstrpnm.o common.o -L ./ -lfreetypeimp -lcimp -lamz -o my_app.exe
fasm demo.asm ftpnm.kex

Я не уверен, можно ли использовать эту библиотеку в программах на fasm, но мне кажется, что можно (а как - это уже совсем другой вопрос). Надеюсь, что более компетентные в этом вопросе люди всё расскажут и покажут.

Спасибо всем за помощь!

Надеюсь, что в Колибри будут более-менее нормальные шрифты значительно раньше того момента, когда наши дети будут писать письма своим внукам :mrgreen: Почему-то мне кажется, что осталось поработать совсем немного (не считая переписывания части программ на использование масштабируемых шрифтов).


Top
   
PostPosted: Wed Mar 30, 2011 12:24 am 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 979
Sorcerer

Тебе всё-таки удалось собрать freetype в библиотеку. Молодец! :)
Большой шаг в сторону браузера, офисных программ и т.п.

Ну тут уже больше всех должен радоваться Albom.


Top
   
PostPosted: Wed Mar 30, 2011 2:01 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Sorcerer
Ура, заработало!!!
С fasm никаких проблем нет. Народ пишет программы и дллки под Windows, здесь то же самое. Конечно требуются некоторые телодвижения по сравнению с С (опять таблицы импорта или extrn объявления), но не большие чем для работы с COFF DLL.
Spoiler: Show
Собрать бы ещё Freetype2. Я бы пересобрал Cairo. У них там специальный frontend к фритайпу. Мечтательно :roll:


Top
   
PostPosted: Wed Mar 30, 2011 8:48 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Решил поковырять и freetype2. Объектники компилируются легко (использую компиляцию из одной папки, все по инструкции), осталось правильно настроить include для сборки только необходимых модулей. Линковщик ругается только на FT_ERROR и FT_TRACE1 (на них ругается и при сборке ./configure --host=i586-mingw32msvc --build=i686-linux-elf, видимо, дело в заголовочных файлах), и еще почему-то на _setjmp.
По непонятной причине def-файл создается где-то в дебрях makefile'ов для visual studio (эх, вот бы сделали как в первом фритайпе, sh-скрипт, и всё), попробую потом его оттуда выдрать. Без def же библиотека не соберется как положено, правильно?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 65 posts ]  Go to page Previous 1 2 3 4 5 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited