Objcopy获取目标文件的64位二进制文​​件

时间:2019-06-15 14:15:43

标签: windows gcc objcopy

我在Windows 10上使用objcopy将dll嵌入到exe文件中并加载它。它运行良好,带有32位二进制dll文件的32位编译,因为我没有错误加载dll。

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

如何设置objcopy参数,以便获得64位二进制文​​件目标文件?如果无法使用objcopy,是否可以替代?当我将其编译为64位时,我的dll不会加载,并且如果我尝试以64位编译目标文件的可执行文件,则会返回错误,提示我的目标文件与64位编译不兼容。

例如在gcc编译期间,我必须做

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

如果我删除了-m32,则它不会编译,因为somedll.o设置为32位,即使它是dll中的64位,因此这就是我的LoadLibrary()函数无法加载它的原因。

1 个答案:

答案 0 :(得分:0)

使用此参数我可以获得最佳结果。

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上效果很好。