Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Пример работы с линкёром  (Прочитано 8015 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zuuuuk
Постоялец

ru
Offline Offline

« : 07-10-2009 05:46 » 

Доброго времени суток.

Подскажите статью или пример работы с линкёром
и написания скриптов для него.

зарание благодарю.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 07-10-2009 05:50 » 

подробности о этом неком "линкЁре" в студию Улыбаюсь)
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 07-10-2009 12:49 » 

Ты имееш виду скрипты Makefile?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
zuuuuk
Постоялец

ru
Offline Offline

« Ответ #3 : 07-10-2009 12:53 » 

я имею ввиду скрипты для управления линковщиком gcc
пример
SECTION {...
   .ouptut1 :
     {
     start_of_output_1 = ABSOLUTE(.) ;
     ...
     }
   .output;
     {
     symbol_1 = ADDR(.output1);
     symbol_2 = start_of_output_1;
     }
 ...}

вообще мне необходимо написать загрузщик для elf файла и слинковать его с основной программой.

которая должна будет работать в контроллере. (32 разрядном)

возможно уже кто то решал подобные задачи.
« Последнее редактирование: 07-10-2009 12:57 от zuuuuk » Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 07-10-2009 13:54 » 

zuuuuk, Этот вопрос не относится с ANSI C/C++ тебе надо в тему Unix.

Если хочешь разобраться с форматом скрипта линкера ld то в этом тебе может только помочь info ld. Так как этот вопрос очень узкоспециализированный и 99% разработчиков с ним не сталкиваются, тебе по большом счету в этом придеться разбираться самому.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 07-10-2009 17:54 » 

zuuuuk, там в принципе ничего сложного нет. Сам писал такой небольшой конфиг:
Код:
OUTPUT_FORMAT ("binary")
/*OUTPUT_FORMAT ("a.out-i386-linux")*/
OUTPUT_ARCH (i386)
ENTRY (_start)
SECTIONS
{
        /* абсолютный адрес загрузки файла */
        . = 0x0500 ;
        /* секция кода */
        __text = .;
        .text : { kernel.o (.text) *(.text) } = 0x90
        __etext = .;

        /* данные только для чтения */
        .rodata : { *(.rodata) *(.rodata.*) }

        /* секция данных */
        . = ALIGN(4);
        .data : { *(.data) } = 0x00
        __edata = .;

        /*
         * Секция данных инициализированных нулями.
         * Не занимает место в объектном файле.
         */
        . = ALIGN(4);
        __bss = .;
        .bss :
        {
                *(.bss)
                *(COMMON)
                . = ALIGN(4096);
                *(.bss.page_dir)
                . = ALIGN(4096);
                *(.bss.page_tab)
        }
        __ebss = .;

        /* все остальное удалим */
        /DISCARD/ : { *(*) }
}
Повторюсь еще раз, тема довольно узкоспециализированная. Читай документацию и смотри примеры скриптов линкера для GCC ('/usr/lib/ldscripts'), а так же можешь посмотреть пример для ядра Linux (./arch/x86/kernel).

Кстати zuuuuk, была такая тема Сборка программы в формате "a.out", там тоже про это немного есть.
« Последнее редактирование: 07-10-2009 18:04 от Serg79 » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines