如何使用 mingw 在 Linux 上链接 64 位 dll 文件

如何使用 mingw 在 Linux 上链接 64 位 dll 文件

我尝试编译并链接一个 *.c 文件(与杰尼)在 Linux 上以 Windows 64 位为目标mingw-w64。 我愿意

x86_64-w64-mingw32-gcc -I"path/to/headers" -shared -o output.dll input.c

一切都编译成功,我得到一个 64 位 *.dll,如下file output.dll所示:

output.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows

但在我的 64 位 Windows 上,java 抛出一个 Unsatisfied link 错误,因为我的 dll 所依赖的某些库缺失。所以我下载了依赖性遍历器并打开了 dll 文件。它显示 *.dll 文件与我所依赖的 dll 的 32 位 (x86) 版本链接,而不是 64 位 dll。只有我的 dll 是 64 位 (x64)。我查看了一下,C:\Windows发现 64 位 dll 也存在。

因此,我尝试通过调整 mingw 命令中的参数来修复此问题。在 ld 的手册条目中,我发现选项 -L 可以指定路径依赖项。因此,我尝试了以下操作:

x86_64-w64-mingw32-gcc -Wl,-L"/usr/x86_64-w64-mingw32/lib/" -I"path/to/headers" -shared -o output.dll input.c
x86_64-w64-mingw32-gcc -Wl,-L"/usr/x86_64-w64-mingw32/lib/",-static -I"path/to/headers" -shared -o output.dll input.c
x86_64-w64-mingw32-gcc -Wl,-static -I"path/to/headers" -shared -o output.dll input.c
x86_64-w64-mingw32-gcc -m64 -I"path/to/headers" -shared -o output.dll input.c

注:/usr/x86_64-w64-mingw32/lib/是mingw的64位*.a文件所在的目录。

上述命令似乎对我的输出 dll 没有任何影响。它保持 64 位,但链接到 32 位 dll。我不知道该怎么做才能让它工作。

另外,当我使用 32 位编译它时,i686-w64-mingw32-gcc一切正常,并且我得到了一个与 Windows 中的 32 位 dll 链接的 32 位 dll。

我的 Windows 是 Windows 7 家庭高级版,顺便说一下,我使用 Java 11。

编辑:我知道但答案对我来说不起作用。

答案1

好吧,我不知道为什么它不起作用。当我三天后再次尝试时,命令

x86_64-w64-mingw32-gcc -Wl,-L"/usr/x86_64-w64-mingw32/lib/" -I"path/to/headers" -shared -o output.dll input.c 

运行正常。因此,如果您遇到同样的问题,我建议您重新启动计算机并尝试上述命令。

相关内容