Подскажите по скриптам линкера (MinGW)

Тема в разделе "LANGS.C", создана пользователем Rel, 20 июн 2011.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    использую MinGW для сборки одного проекта (динамическая библиотека)... проект должен быть как можно меньшего объема... в результете сборки получается 6,5 килобайт для 32-битных операционных систем и 7,5 для 64-битных операционных систем... в принципе неплохой размер, но посмотрев получившийся PE-файл я обнаружил в нем несколько лишних на мой взгляд секций: .rdata - константы, .idata - данные для импорта функций, .edata - данные для экспорта функций... я хотел смерждить эти секции с секцией .data, для этого написал вот такой скрипт линкера:
    Код (Text):
    1. SECTIONS
    2. {
    3.     . = SIZEOF_HEADERS;
    4.     . = ALIGN(__section_alignment__);
    5.  
    6.     .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :
    7.     {
    8.         *(.text)
    9.     }
    10.     .data BLOCK(__section_alignment__) :
    11.     {
    12.         *(.data)
    13.         *(.rdata)
    14.         *(.edata)
    15.         SORT(*)(.idata$2)
    16.         SORT(*)(.idata$3)
    17.         LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
    18.         SORT(*)(.idata$4)
    19.         SORT(*)(.idata$5)
    20.         SORT(*)(.idata$6)
    21.         SORT(*)(.idata$7)
    22.     }
    23.     .reloc BLOCK(__section_alignment__) :
    24.     {
    25.         *(.reloc)
    26.     }
    27.     /DISCARD/ :
    28.     {
    29.         *(.drectve)
    30.     }
    31. }
    в результате PE-файл стал собираться с нужными мне секциями (данные всех трех секции успешно добавились в секцию .data), но смещения таблиц импорта и экспорта стали нулевыми... что я сделал не так? возможно ли вообще для виндовой версии гну-шного линкера смешивать секции с данными таблицы импорта и таблицы экспорта с другими секциями?