привет!
есть некоторая 32ух-битная программка. программка юзает некоторые ресурсы, которые предвариательно генеряться как массив байт:
static const char res[] = {
0x01, 0x02, 0x03, ...
};
все было хорошо, пока 32ух-битному компилятору хватало памяти чтоб скомпилить этот массив.
пробовал скомпилить этот массив 64ех-битным компилятором, и прилинковать в 32ух битную программу — не линкуется, формат объектных файлов несовпадает.
можно ли вообще такое сделать, и как?
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>пробовал скомпилить этот массив 64ех-битным компилятором, и прилинковать в 32ух битную программу — не линкуется, формат объектных файлов несовпадает.
X>можно ли вообще такое сделать, и как?
Компилировал с -m32?
Можно это ресурс не пихать в массив, а влинковать напрямую.
https://balau82.wordpress.com/2012/02/19/linking-a-binary-blob-with-gcc/
Здравствуйте, niXman, Вы писали:
X>привет!
X>можно ли вообще такое сделать, и как?
Конечно. Это частный случай
кросс-компиляции. Ограничений тут нет кроме одного: массив res всё же должен быть достаточно мал, чтобы целиком влезть в 32-х битное адресное пространство целевой программы.
X>пробовал скомпилить этот массив 64ех-битным компилятором, и прилинковать в 32ух битную программу — не линкуется, формат объектных файлов несовпадает.
Ну если неправильные параметры передать, или если компилятор не поддерживает кросс-компиляцию, то, увы, такой исход тоже возможен.
X>есть некоторая 32ух-битная программка. программка юзает некоторые ресурсы, которые предвариательно генеряться как массив байт:
X>X>static const char res[] = {
X> 0x01, 0x02, 0x03, ...
X>};
X>
X>все было хорошо, пока 32ух-битному компилятору хватало памяти чтоб скомпилить этот массив.
Но понятно же, что в этом случае совсем не обязательно пропускать такую портянку через C++ компилятор. Почему бы просто не воспользоваться утилитой, которая возмьвёт массив и положит его в объектный файл без каких-либо огромных выделений памяти (всякие incbin из ассемблеров, например).
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>В VS (последних) есть 64-битный компилятор для 32-битной платформы.
студия довольно давно поддерживает x64 тулсет :
https://stackoverflow.com/questions/19820718/how-to-make-visual-studio-use-the-native-amd64-toolchain