Objcopy получение объектного файла 64-битных двоичных файлов - PullRequest
0 голосов
/ 15 июня 2019

Я использую 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() не может его загрузить.

1 Ответ

0 голосов
/ 15 июня 2019

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

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 в мой исполняемый файл без каких-либо проблем с двоичной совместимостью. Хорошо работает на windows.

...