Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Nov 20, 2019 7:41 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 20 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Sat Sep 25, 2010 12:28 pm 
Serge
Статические для меня лично не удобны не тем, что их приходится ликовать при компиляции, а FASM это не кушает. :oops: Столкнулся этим при прикручивании OpenDialog к kpack - код под Tasm я переписал на Fasm, а вот со статической библиотекой упаковки LZMA облом. Была мысль "линковать" через опцию file, но как оказалось сама библиотека LIB имеет хитрую структуру и при линковке в Tasm значительно модернизируется. Все хитрости относительно LIB я узнал у diamond'a через мессенджер.

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


Top
   
PostPosted: Sat Sep 25, 2010 12:53 pm 
Offline
Kernel Developer

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

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


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


Top
   
PostPosted: Sat Sep 25, 2010 4:41 pm 
Offline
Kernel Developer

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

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


Attachments:
libavcodec.txt [3.48 KiB]
Downloaded 210 times
Top
   
PostPosted: Sat Sep 25, 2010 6:20 pm 
Serge
Т.е. линковщик эти самые перекрестные связи анализирует и оставляет только нужные?


Top
   
PostPosted: Sat Sep 25, 2010 8:24 pm 
Offline
Kernel Developer

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

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


Top
   
 Post subject: Re: Либы на ЯВУ
PostPosted: Tue Sep 28, 2010 9:39 am 
Serge
Вопрос тогда такой: те OBJ которые в LIB - они имеют формат подобный Колибри OBJ или отличаются, т.е. их нельзя загрузить и использовать в Колибри без переделки?


Top
   
 Post subject: Re: Либы на ЯВУ
PostPosted: Tue Sep 28, 2010 10:20 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Если там MS COFF то формат файла совпадает. Но в библиотеке Колибри должна быть самодельная таблица экспорта и метка EXPORTS. Без неё импорт из библиотеки невозможен.


Top
   
 Post subject: Re: Либы на ЯВУ
PostPosted: Tue Sep 28, 2010 3:13 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> мне нужно получить используемый в Колибри MS COFF OBJ
diamond же сделал утиль по конвертации DLL в OBJ, чуть ли не по моей просьбе (kex, без сорцев). Работает, я проверял. Костыль конечно, но лучше чем ничего.

..bw


Top
   
 Post subject: Re: Либы на ЯВУ
PostPosted: Tue Sep 28, 2010 3:40 pm 
DLL в OBJ это конечно замечательно, но мне в конкретном случае надо kpack доковырять с уже имеющейся LIB библиотекой. :?
Спасибо за сведения - в любом случае пригодится.


Top
   
PostPosted: Thu Sep 30, 2010 6:43 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Serge wrote:
Вообще идея использовать COFF.obj для длл была крайне неудачной. Надо было сразу делать PE.


Надеюсь к драйверам это отношения не имеет.


Top
   
PostPosted: Thu Sep 30, 2010 8:00 pm 
Asper wrote:
Serge wrote:
Вообще идея использовать COFF.obj для длл была крайне неудачной. Надо было сразу делать PE.


Надеюсь к драйверам это отношения не имеет.

Ты не уловил сослогательного наклонения в истории альтернативной реальности? :mrgreen:


Top
   
 Post subject: Re: Либы на ЯВУ
PostPosted: Thu Sep 30, 2010 8:04 pm 
Offline
Kernel Developer

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

Имеет. Новый драйверы в PE формате. Кстати ничто не мешает писать их и на ассемблере.


Top
   
 Post subject: Re: Либы на ЯВУ
PostPosted: Thu Sep 30, 2010 8:14 pm 
Но старые то ведь поддерживаются? Или неужто все переписал на PE?


Top
   
 Post subject: Re: Либы на ЯВУ
PostPosted: Thu Sep 30, 2010 9:12 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Поддерживаются. Их и в PE пересобрать можно. Благо COFF.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 20 posts ]  Go to page 1 2 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