|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 30, 2004 11:01:26 Народ! Реально ли написать собственный линкер объектников. Может что посоветуете на эту тему (доки, исходники и т. д.). |
|
|
Дата: Апр 30, 2004 11:11:11 Насчет своего - не в курсе, а вот чужой линкер написать реально - alink.sourceforge.net |
|
|
Дата: Апр 30, 2004 14:57:07 Зная формат объектных файлов и библиотек, а также формат получаемого модуля - можно конечно. Форматы здесь: http://www.wotsit.org/ Вообще-то уже есть куча линкеров - чем они не подходят? |
|
|
Дата: Май 2, 2004 14:39:43 хммм... под винду UniLink рулит - все на месте, ничего лишнего, настроек море. И понимает почти все, что только можно придумать... Берется на ftp://ftp.styx.cabel.net/pub/UniLink/ |
|
|
Дата: Май 7, 2004 10:48:28 · Поправил: tim Общая задача такая: компилить с C++ исходника некий модуль, который будет работать под специальной оболочкой. Модуль API операционки не использует -> может быть использован в любой OS, под которую есть оболочка. Идея - не писать C++ компилятор руками, а только линковать объектник, до этого скомпилённый, к примеру gcc. А за URL-ы спасибо. |
|
|
Дата: Май 22, 2004 06:06:07 вот с API как раз проблем нет. с RTL - хуже. там много чего недокументированного, без чего нихрена не слинкуешь... к тому же с Си++ свои заморочки (как минимум необходимо разманглять функции...) "вырожденный" линкер, который просто берет obj, анализирует таблицу секций, вытаскивает их содержимое и делает, например, PE достаточно прост и реализуется тривально. лучше использовать любой подоходящий Front-End компилятор, генерирующий промежуточный код, который потом можно "доводить" руками до нужной кондиции. кстати говоря, он независит от процессора и потому может выполняться везде, где есть соответствующая vm. |
|
|
Дата: Май 22, 2004 09:32:13 Да, CRT (RTL) использует АПИ на полную. Лично я отключаю CRT нафик и пишу сам, но это тяжелый отпечаток ассемблера на мозгу. Так что просто слинковать под чужую ОС вряд ли получится. А вот если отключить лишнее и писать все с нуля, то... придется сильно постараться. Надо предусмотреть, что оператор new - это просто выделение памяти, т.е. АПИшка. И написать кроссплатформенный код будет категорически непросто. |
|
|
Дата: Май 22, 2004 10:33:11 почему new это API? во-первых, во многих rtl new восходит к собственному менеджеру, а, во-вторых, если по каким-то причинам API не юзабельно, можно вспоминить про стек. трудности с линковкой не в поддержке API. ну что ее поддерживать-то?! просто вбухал в таблицу импорта все вызовы (это без LIB'ы), а с LIB'ой - вообще проблем нет (а LIB'ы обычно есть). сложнее с PE, который не вполне документирован и обрабатывается загрузчиком довольно противоречивым образром (скоро выйдет статья на эту тему, там много багофич описано), плюс хитрые правила компоновки служебных сегментов компилятора, нигде тольком не описанные... как минимум следует внимательно изучить сорцы rtl, чтобы например понять механизм финилизинга, бо без него назначение секций семейства CRT$ и правила их группировки вовсе не так очевидны. загляните DEFSECTS.INC из MS VC - только валидол предварительно не забудьте ;) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075 |