我在 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()
函数无法加载它。
我能够通过这个论点获得最佳结果。
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 嵌入到可执行文件中,而不会遇到任何二进制兼容性问题。它在窗户上效果很好。