скомпилить массив байт 64ех битным компилятором, и использовать 32ух
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.09.17 12:44
Оценка:
привет!

есть некоторая 32ух-битная программка. программка юзает некоторые ресурсы, которые предвариательно генеряться как массив байт:
static const char res[] = {
    0x01, 0x02, 0x03, ...
};

все было хорошо, пока 32ух-битному компилятору хватало памяти чтоб скомпилить этот массив.

пробовал скомпилить этот массив 64ех-битным компилятором, и прилинковать в 32ух битную программу — не линкуется, формат объектных файлов несовпадает.
можно ли вообще такое сделать, и как?

спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: скомпилить массив байт 64ех битным компилятором, и использовать 32ух
От: andrey.desman  
Дата: 01.09.17 12:56
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>пробовал скомпилить этот массив 64ех-битным компилятором, и прилинковать в 32ух битную программу — не линкуется, формат объектных файлов несовпадает.

X>можно ли вообще такое сделать, и как?

Компилировал с -m32?

Можно это ресурс не пихать в массив, а влинковать напрямую.
https://balau82.wordpress.com/2012/02/19/linking-a-binary-blob-with-gcc/
Re: скомпилить массив байт 64ех битным компилятором, и использовать 32ух
От: watchmaker  
Дата: 01.09.17 13:03
Оценка:
Здравствуйте, 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 из ассемблеров, например).
Re: скомпилить массив байт 64ех битным компилятором, и использовать 32ух
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 01.09.17 15:42
Оценка:
Здравствуйте, niXman, Вы писали:

X>все было хорошо, пока 32ух-битному компилятору хватало памяти чтоб скомпилить этот массив.


X>пробовал скомпилить этот массив 64ех-битным компилятором, и прилинковать в 32ух битную программу — не линкуется, формат объектных файлов несовпадает.

X>можно ли вообще такое сделать, и как?

X>спасибо.


В VS (последних) есть 64-битный компилятор для 32-битной платформы.

Я, правда, их из командной строки юзаю.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: скомпилить массив байт 64ех битным компилятором, и использовать 32ух
От: uzhas Ниоткуда  
Дата: 04.09.17 10:02
Оценка: 5 (2)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>В VS (последних) есть 64-битный компилятор для 32-битной платформы.


студия довольно давно поддерживает x64 тулсет : https://stackoverflow.com/questions/19820718/how-to-make-visual-studio-use-the-native-amd64-toolchain
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.