mingw-w64 - 与 MinGW 交叉编译时,GetSaveFileName 链接失败
问题描述
我正在尝试使用 mingw 在 Ubuntu 18.04 上编译UniLogger的修改版本。我收到以下链接错误:
undefined reference to '_imp__GetSaveFileNameW@4'
我在 MinGW 邮件列表上发现这篇文章说需要明确链接到 comdlg32 所以我也尝试了:
i686-w64-mingw32-g++ -municode -o unilogger.exe -lcomdlg32 Source.cpp
但仍然得到了同样的错误,就像在帖子中询问的人一样。他和我都验证了 lib 文件中函数的存在:
nm /usr/i686-w64-mingw32/lib/libcomdlg32.a
libcomdlg32s00012.o:
00000000 b .bss
00000000 d .data
00000000 T _GetSaveFileNameW@4
U __head_lib32_libcomdlg32_a
00000000 i .idata$4
00000000 i .idata$5
00000000 i .idata$6
00000000 i .idata$7
00000000 I __imp__GetSaveFileNameW@4
00000000 t .text
libcomdlg32s00011.o:
00000000 b .bss
00000000 d .data
00000000 T _GetSaveFileNameA@4
U __head_lib32_libcomdlg32_a
00000000 i .idata$4
00000000 i .idata$5
00000000 i .idata$6
00000000 i .idata$7
00000000 I __imp__GetSaveFileNameA@4
00000000 t .text
在这一点上,我有点不知所措。
解决方案
好的,找出问题所在 - 命令行上的争论顺序:
i686-w64-mingw32-g++ -lcomdlg32 -municode -o unilogger.exe
给出链接错误,但是
i686-w64-mingw32-g++ -municode -o unilogger.exe -lcomdlg32
编译就好了。实际上我认为我以前在 gcc 上遇到过这个问题,现在我想到了......
推荐阅读
- javascript - AngularJS 指令在使用 $.get 加载动态内容后编译
- laravel - SQLSTATE[08006] 超时过期
- c# - 使用 netcore 2.2 运行“dotnet Myapp.dll”时覆盖 applicationUrl
- nginx - Nginx 入口 OAuth 注销(Kubernetes)?
- terminology - 解释回归输出:股票指数百分比与基点变化
- java - 如何在放心的测试用例中重用 oauth2 令牌
- list - Azure Cosmos 查询转换为列表
- html - Bootstrap 4 导航栏在编码过程中丢失了背景
- node.js - 在数组 mongodb 中添加另一个项目
- arrays - 如何获取数组中元素的位置