我在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()
函数无法加载它的原因。
答案 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上效果很好。