Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt Win] указать mingw слить секции data->text


Автор: Softaz 4.8.2015, 07:19
Здравствуйте!
Что-то застопорился.
В VS компилере можно прямо в файле добавить опции линкера 

Код

#pragma comment(linker,"/MERGE:.rdata=.text")


В MinGW такого, увы, нельзя. Однако, https://sourceware.org/binutils/docs/ld/Simple-Example.html и сделать это все-таки можно. Более того, http://gruntthepeon.free.fr/blog/index.php/2008/06/29/28-merging-text-and-rdata-on-windows и http://stackoverflow.com/questions/29167222/howto-pass-commands-to-the-linker-script-via-pro-file-qt.
Расписано буквально по шагам. Однако, не получается. Пишет
Цитата

A:\plugin\testapp\ld_script.ld:-1: ошибка: file format not recognized; treating as linker script

То есть ругается на файл скрипта, что он не распознан.
В .pro файл добавил:
Код

win32-g++ {
QMAKE_LFLAGS += "A:/plugin/testapp/ld_script.ld" #пробывал с парамтером -T A:/...
}

и сам файл скрипта:
Код

SECTIONS
{
.text : { *(.text) *(.rdata) *(SORT(.rdata$*))
}

*добавлено:
пробовал подсовывать файл скрипта по умолчанию "ld --verbose > ld_script.ld" -- результат тот же.

mingw492_32/Qt 5.5

Есть идеи?

Автор: Softaz 4.8.2015, 09:51
Сделал чуть другое форматирование и с опцией -TA:/ld_script.x все скомпилировалось

Цитата

     SECTIONS
     {
     . = 0x1000;
       .text : {   *(.text)  *(.rdata)  *(SORT(.rdata$*)) }
     }

Однако, таблица вирт. адресов нафих съехала.
Было
Цитата

.text    0x1000    0x19d0    0x1a00    R-X CODE IDATA    
.data    0x3000    0x34    0x200    RW- IDATA    
.rdata    0x4000    0x6c0    0x800    R-- IDATA    
.eh_fram    0x5000    0x860    0xa00    R-- IDATA    
.bss    0x6000    0x414    0    RW- UDATA    
.idata    0x7000    0x640    0x800    RW- IDATA    
.CRT    0x8000    0x34    0x200    RW- IDATA    
.tls    0x9000    0x20    0x200    RW- IDATA


Стало
Цитата

.text    0xffc00000    0x2044    0x2200    R-X CODE IDATA    
.idata    0xffc00000    0x5d8    0x600    RW- IDATA    
.text.st    0xffc03000    0x30    0x200    R-X CODE    
.eh_fram    0xffc04000    0x860    0xa00    R-- IDATA    
.data    0xffc05000    0x30    0x200    RW- IDATA    
.CRT    0xffc06000    0x34    0x200    RW- IDATA    
.drectve    0xffc07000    0x138    0x200    RW- IDATA    
.jcr    0xffc08000    4    0x200    RW- IDATA    
.tls    0xffc09000    0x20    0x200    RW- IDATA    
.idata    0xffc0a000    0x54    0x200    RW- IDATA    
.ctors.6    0xffc0b000    4    0x200    RW- IDATA    
.bss    0xffc0c000    0x30    0    RW- UDATA

Так что теперь файл "не является приложением Win32".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)