Objcopy получает объектный файл 64-битных двоичных файлов

Я использую objcopy в Windows 10, чтобы встроить свою dll в exe и загрузить ее. Он отлично работает с 32-битной компиляцией с 32-битным двоичным файлом dll, так как я не получаю ошибок при загрузке моей dll.

objcopy --prefix-symbol=_ --input-target binary --output-target pe-i386 --binary-architecture i386 somedll.dll somedll.o

Как я могу установить аргументы objcopy, чтобы получить 64-битный объектный файл двоичных файлов? Если это невозможно с objcopy, есть ли ему альтернативы? Моя dll не загружается, когда я компилирую ее как 64-битную, и если я пытаюсь скомпилировать исполняемый файл с объектным файлом, как в 64-битной версии, он возвращает ошибку, говорящую, что мой объектный файл несовместим с 64-битной компиляцией.

поэтому, например, во время компиляции gcc я должен сделать

gcc -m32 Myfile.c somedll.o -o output.exe

если я удалю -m32, он не скомпилируется, потому что для somedll.o установлено значение 32 бита, даже если оно было 64-битным, как в dll, поэтому моя функция LoadLibrary() не может его загрузить.


person turmuka    schedule 15.06.2019    source источник


Ответы (1)


Я смог получить наилучшие результаты с этим аргументом.

objcopy --prefix-symbol=_ --input-target binary --output-target pe-x86-64 --binary-architecture i386:x86-64 some64.dll some64.o

Переключение pe-i386 на pe-x86-64 и i386 на i386:x86-64 позволило мне внедрить мою 64-битную dll в мой исполняемый файл без каких-либо проблем с бинарной совместимостью. Он хорошо работает на окнах.

person turmuka    schedule 15.06.2019