【发布时间】:2018-01-14 15:15:29
【问题描述】:
我在 Debian 8.9 Jessie (x86-64) 中使用 Code::Blocks IDE 和 wxWidgets。
当我使用 GNU GCC 编译器时,一切正常,因此可以为 Linux 编译好的 wxWidgets 可执行文件。
但是我需要让我的程序在 Windows 平台上运行,所以我必须进行交叉编译。
我已经安装了 mingw32 并按照给出的交叉编译说明进行操作
here.
我的 wxWidgets 构建配置如下:
./configure prefix=/usr/i686-w64-mingw32 --host=i686-w64-mingw32 --enable-unicode --build=`./config.guess` --disable-shared
这是因为我的MinGW编译器是i686-w64-mingw32,位于文件夹/usr/i686-w64-mingw32,wxWidgets版本是3.1。
我在 Code::Blocks 中的编译器设置应该是正确的,因为我设法为简单的控制台应用程序进行了交叉编译,并且这些应用程序在 Windows 10.0 上正常运行。但是对于 wxWidgets 应用程序有几个问题:
-
编译器给了我错误(在项目的构建选项中将 --static 添加到
Other compiler options时发生):fatal error: wx/app.h: No such file or directory|现在,由于有问题的 wx 目录位于路径
/usr/i686-w64-mingw32/include/wx-3.1中,因此我将此路径添加到项目的搜索目录中(目前仅构建目标)。这很好地继续进行。
我的编译器设置是:wx-config --host=i686-w64-mingw32 --static --cflags -
编译器再次发誓(虽然并不惊讶:-)):
fatal error: wx/setup.h: No such file or directory|好的,我在
/usr/i686-w64-mingw32/lib/wx/include/i686-w64-mingw32-msw-unicode-static-3.1找到了这个,所以将此路径添加到编译器搜索目录。 -
这次链接器在发誓(让我神经紧张):
对于构建目标:
undefined reference to `wxEntry(HINSTANCE__*, HINSTANCE__*, char*, int)'|对于发布目标:
undefined reference to `wxAppConsoleBase::CheckBuildOptions(char const*, char const*)'|我的链接器设置是
wx-config --host=i686-w64-mingw32 --static --libs
我尝试使用 wxWidgets 库的几种不同构建选项来解决此问题,但对结果没有影响。所以请有人帮忙!
我还注意到,从 wxWidgets 下载目录运行 ./config.guess 会得到 x86_64-unknown-linux-gnu。因此这意味着我应该使用x86_64-w64-mingw32(我在/usr/x86_64-w64-mingw32中安装了这个)编译器而不是i686-w64-mingw32?
【问题讨论】:
-
为什么要交叉编译,而不是直接在Windows上构建(用mingw?)
-
我想您会发现拥有一台用于开发和测试目的的 Windows 机器(可能是虚拟机)要容易得多。
-
@MartinBonner 肯定会更容易,但我不想为许可证付费或做一些非法的事情:-)。
-
@Pekov,运行
wx-config --host=i686-w64-mingw32 --libs的结果是什么?另外,您能否成功构建和运行最少的示例? -
@Pekov,另外,我会尝试找一台安装了 Windows 的额外机器并尝试一下。或者只是使用全新的机器。
标签: c++ linux cross-compiling wxwidgets