使用 MinGW 进行交叉编译时,GetSaveFileName 的链接失败
Linking fails for GetSaveFileName when cross compiling with MinGW
我正在尝试使用 mingw 在 Ubuntu 18.04 上编译 UniLogger 的修改版本。我收到以下 link 错误:
undefined reference to '_imp__GetSaveFileNameW@4'
我发现 this post on the MinGW mailing list 说需要明确 link 到 comdlg32 所以我也试过了:
i686-w64-mingw32-g++ -municode -o unilogger.exe -lcomdlg32 Source.cpp
但还是和 post 中提问的人一样出现了同样的错误。他和我都验证了 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
00000000 i .idata
00000000 i .idata
00000000 i .idata
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
00000000 i .idata
00000000 i .idata
00000000 i .idata
00000000 I __imp__GetSaveFileNameA@4
00000000 t .text
此时我有点不知所措。
好的,找出问题所在 - 命令行中的参数顺序:
i686-w64-mingw32-g++ -lcomdlg32 -municode -o unilogger.exe
给出 link 错误,但是
i686-w64-mingw32-g++ -municode -o unilogger.exe -lcomdlg32
编译正常。实际上我认为我以前使用 gcc 运行 遇到过这个问题,现在我想起来了...
我正在尝试使用 mingw 在 Ubuntu 18.04 上编译 UniLogger 的修改版本。我收到以下 link 错误:
undefined reference to '_imp__GetSaveFileNameW@4'
我发现 this post on the MinGW mailing list 说需要明确 link 到 comdlg32 所以我也试过了:
i686-w64-mingw32-g++ -municode -o unilogger.exe -lcomdlg32 Source.cpp
但还是和 post 中提问的人一样出现了同样的错误。他和我都验证了 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
00000000 i .idata
00000000 i .idata
00000000 i .idata
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
00000000 i .idata
00000000 i .idata
00000000 i .idata
00000000 I __imp__GetSaveFileNameA@4
00000000 t .text
此时我有点不知所措。
好的,找出问题所在 - 命令行中的参数顺序:
i686-w64-mingw32-g++ -lcomdlg32 -municode -o unilogger.exe
给出 link 错误,但是
i686-w64-mingw32-g++ -municode -o unilogger.exe -lcomdlg32
编译正常。实际上我认为我以前使用 gcc 运行 遇到过这个问题,现在我想起来了...