【发布时间】:2020-08-03 14:38:12
【问题描述】:
从示例目录编译和链接 minimum.cpp 文件时出现此错误
g++ -o "SampleMinimal" ./src/minimal.o -lwx_mswu_xrc-3.0-x86_64-w64-mingw32 -lwx_mswu_webview-3.0-x86_64-w64-mingw32 -lwx_mswu_html-3.0-x86_64-w64-mingw32 -lwx_mswu_qa-3.0-x86_64-w64-mingw32 -lwx_mswu_adv-3.0-x86_64-w64-mingw32 -lwx_mswu_core-3.0-x86_64-w64-mingw32 -lwx_baseu_xml-3.0-x86_64-w64-mingw32 -lwx_baseu_net-3.0-x86_64-w64-mingw32 -lwx_baseu-3.0-x86_64-w64-mingw32 -L/usr/x86_64-w64-mingw32/sys-root/mingw/lib -Wl,--subsystem,windows -mwindows -Wl,--enable-auto-import
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: ./src/minimal.o: in function `wxString::ImplStr(char const*, wxMBConv const&)':
/usr/x86_64-w64-mingw32/sys-root/mingw/include/wx-3.0/wx/string.h:477: undefined reference to `wxString::ConvertStr(char const*, unsigned long, wxMBConv const&)'
/usr/x86_64-w64-mingw32/sys-root/mingw/include/wx-3.0/wx/string.h:477:(.text$_ZN8wxString7ImplStrEPKcRK8wxMBConv[_ZN8wxString7ImplStrEPKcRK8wxMBConv]+0x3a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `wxString::ConvertStr(char const*, unsigned long, wxMBConv const&)'
collect2: error: ld returned 1 exit status
成功创建目标文件。
编译器命令行:
g++ -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXMSW__ -I/usr/x86_64-w64-mingw32/sys-root/mingw/lib/wx/include/x86_64-w64-mingw32-msw-unicode-3.0 -I"/usr/x86_64-w64-mingw32/sys-root/mingw/include/wx-3.0" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/minimal.d" -MT"src/minimal.o" -o "src/minimal.o" "../src/minimal.cpp"
Finished building: ../src/minimal.cpp
链接器命令行:
g++ -o "SampleMinimal" ./src/minimal.o -lwx_mswu_xrc-3.0-x86_64-w64-mingw32 -lwx_mswu_webview-3.0-x86_64-w64-mingw32 -lwx_mswu_html-3.0-x86_64-w64-mingw32 -lwx_mswu_qa-3.0-x86_64-w64-mingw32 -lwx_mswu_adv-3.0-x86_64-w64-mingw32 -lwx_mswu_core-3.0-x86_64-w64-mingw32 -lwx_baseu_xml-3.0-x86_64-w64-mingw32 -lwx_baseu_net-3.0-x86_64-w64-mingw32 -lwx_baseu-3.0-x86_64-w64-mingw32 -L/usr/x86_64-w64-mingw32/sys-root/mingw/lib -Wl,--subsystem,windows -mwindows -Wl,--enable-auto-import
【问题讨论】:
-
您使用的是 MSYS 1 还是 MSYS 2?您是自己构建的库还是使用预构建的库?
-
Igor 感谢您回答不确定 MSYS 1 和 MSYS 2 之间的区别。我从 cygwin 内部安装了 MinGw 和 wxWidget 库。所以我使用的是预制的。我怎么知道我有哪个 MSYS? uname -a 显示:CYGWIN_NT-10.0 ENGWSL201908-16 3.1.4(0.340/5/3) 2020-02-19 08:49 x86_64 Cygwin。
-
很抱歉,您根本不清楚您在做什么以及为什么要显示这些编译器/链接器命令行。他们来自哪里?你似乎既没有使用
samples/minimal/makefile.unx,也没有使用配置生成的samples/minimal/Makefile,那么你是怎么得到它们的呢?另外,您真的要构建库的 Cygwin 版本吗?如果是这样,你有什么好的理由这样做吗?如果没有,我强烈建议使用 MinGW 编译器之一来构建。 -
@JeffreyJacobs,您可能下载了不兼容的 wxWidgets 版本,该版本是使用您使用的不同编译器构建的。正如 Vadim 建议的那样,最好的方法是使用 configure 自己构建库,然后在自己的项目中使用它。
-
对不起 Igor StackOverflow 新手。我正在使用 Eclipse 进行编译和链接。我为 Eclipse、Cygwin 和 wxWidgets 创建了一个标签,所以我认为 Eclipse 是创建编译器和链接器命令的方式很明显。我之前已经下载了源代码但未能编译,所以在获得二进制文件后,我将 wxWidget 源中的 minimum.cpp 代码导入 Eclipse。您可以在下面看到我能够构建和运行代码。再次感谢。
标签: c++ windows eclipse cygwin wxwidgets