Page 1 of 2

Либы на ЯВУ

Posted: Fri Sep 24, 2010 9:50 pm
by Mario
Serge wrote:А вот писать на асме обычный код имхо тратить время впустую.
Ну, проект ведь сугубо добровольный и даже выбор инструментов сугубо добровольный. Однако к сожалению под саму Колибри ничего нет кроме Fasm (великого и могучего как Русский язык). Так что в данный момент и обсуждать в этом плане относительно Колибри бессмысленно. Все что не может быть скомпилировано в самой ОС - навязывает зависимость от сторонних программ и систем.

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 12:26 am
by Serge
Mario

С этим тоже согласен. Попробую как нибудь собрать gcc для Колибри. Тогда не отвертитесь :D

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 1:28 am
by Mario
Serge
А че не отвертитесь то? Я бы рад был получить библиотеку распаковки Видео и Звука. Если бы это была работа уровня распаковки картинок как в zSea, то видеоплеер был бы не за горами, даже учитывая что пишу на ассемблере. А уж как работать с RAW данными кодом на ассемблере - это я умею. :lol:

К тому же работа будет считаться 100% зачтенной лишь в случае, если собранный GCC соберет себя сам под Колибри, как в свое время FASM собрал себя сам у Томаша (не под Колибри и не под Menuet было дело правда, хотя хз каким путем Вилле портировал).

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 11:30 am
by Serge
Mario

Так есть оно все. И mpg123 и ffpmeg. Первый в PE DLL, вторые пока в обычной либе для статической компоновки. C ffmpeg проблема в том что нормально он работает только в виде DLL. Под винду статику уже давно не выкладывают. Сделал специальный лаунчер чтобы запускать PE приложения с прилинковкой DLL. Всё работает в usermode. Но теперь в Колибри библиотеки расшарены и такой вариант проигрывает по расходу памяти. Хотя у многих сейчас памяти больше, чем может использовать ядро.

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 12:28 pm
by Mario
Serge
Статические для меня лично не удобны не тем, что их приходится ликовать при компиляции, а FASM это не кушает. :oops: Столкнулся этим при прикручивании OpenDialog к kpack - код под Tasm я переписал на Fasm, а вот со статической библиотекой упаковки LZMA облом. Была мысль "линковать" через опцию file, но как оказалось сама библиотека LIB имеет хитрую структуру и при линковке в Tasm значительно модернизируется. Все хитрости относительно LIB я узнал у diamond'a через мессенджер.

В общем при любом раскладе мне нужно получить используемый в Колибри MS COFF OBJ для работы с ним в Fasm и было бы здорово придумать и отладить универсальную и достаточной простую методику получения. Или в текущем яре есть возможность загружать не только MS COFF OBJ? Позиция по этому вопросу не принципиальная, лишь бы была возможность простого вызова из приложения.

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 12:53 pm
by Serge
Mario

Дохлый номер. В больших библиотеках тысячи файлов. Часто пишут так что одна функция - один файл и соответственно один *.obj. Не случайно компоновщики несколько сот килибайт занимают и памяти требуют много. Вообще идея использовать COFF.obj для длл была крайне неудачной. Надо было сразу делать PE. А все это дурацкое общее стремление сэкономить пару байт. Теперь оно выходит боком. С одной стороны DLL вроде и есть и даже расшарены, а с другой попробуй скомпилируй freetype, ffmpeg или mesa в один файл.

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 2:22 pm
by Mario
Serge
Но ведь есть утилиты которые собирают LIB из OBJ - неужели нельзя написать обратную процедуру, чтобы распотрошила LIB на кучу OBJ?

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 4:41 pm
by Serge
Mario

Те же самые утилиты и потрошат. Это ведь архив. ar -x имя_библиотеки. Извлекает все объекты. Только их там сотни и между ними прекрёстные ссылки. Один тянет за собой десяток других. Вот для примера список объектов в libavcodec.a

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 6:20 pm
by Mario
Serge
Т.е. линковщик эти самые перекрестные связи анализирует и оставляет только нужные?

Re: Fast Fourier Transform

Posted: Sat Sep 25, 2010 8:24 pm
by Serge
Mario

Да. Строятся списки имён переменных и функций по всем объектным файлам и дерево зависимостей. Если на переменные и функции из объектного файла нет ссылок он не включается в конечную программу. Eщё проводится масса различных оптимизаций. Последние версии компоновщиков вообще сами генерируют окончательный код (Link-time code generation). Компилятор создаёт промежуточный псевдокод для программы и библиотечных функций из которого компоновщик собирает программу. Bochs после такой компиляции получается процентов на 20 меньше и заметно быстрее.

Re: Либы на ЯВУ

Posted: Tue Sep 28, 2010 9:39 am
by Mario
Serge
Вопрос тогда такой: те OBJ которые в LIB - они имеют формат подобный Колибри OBJ или отличаются, т.е. их нельзя загрузить и использовать в Колибри без переделки?

Re: Либы на ЯВУ

Posted: Tue Sep 28, 2010 10:20 am
by Serge
Если там MS COFF то формат файла совпадает. Но в библиотеке Колибри должна быть самодельная таблица экспорта и метка EXPORTS. Без неё импорт из библиотеки невозможен.

Re: Либы на ЯВУ

Posted: Tue Sep 28, 2010 3:13 pm
by bw
> мне нужно получить используемый в Колибри MS COFF OBJ
diamond же сделал утиль по конвертации DLL в OBJ, чуть ли не по моей просьбе (kex, без сорцев). Работает, я проверял. Костыль конечно, но лучше чем ничего.

..bw

Re: Либы на ЯВУ

Posted: Tue Sep 28, 2010 3:40 pm
by Mario
DLL в OBJ это конечно замечательно, но мне в конкретном случае надо kpack доковырять с уже имеющейся LIB библиотекой. :?
Спасибо за сведения - в любом случае пригодится.

Re: Fast Fourier Transform

Posted: Thu Sep 30, 2010 6:43 pm
by Asper
Serge wrote: Вообще идея использовать COFF.obj для длл была крайне неудачной. Надо было сразу делать PE.
Надеюсь к драйверам это отношения не имеет.