交叉编译 wxWidgets 代码从 Linux 到 Windows

Cross-Compiling wxWidgets code from Linux to Windows

我在 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应用时,有几个问题:

  1. 编译器给我错误(当 --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

  2. 编译器再次发誓(虽然并不惊讶:-)):

    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 中找到了这个,所以将此路径添加到编译器搜索目录中。

  3. 链接器这次骂人了(让我毛骨悚然):

    构建目标:

    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 库的几个不同的构建选项来解决这个问题,但对结果没有影响。所以,请有人帮忙!

我还注意到 运行ning ./config.guess 形式的 wxWidgets 下载目录给了我 x86_64-unknown-linux-gnu。因此这意味着我应该使用 x86_64-w64-mingw32(我在 /usr/x86_64-w64-mingw32 中安装了这个)编译器而不是 i686-w64-mingw32?

所以主要的问题是命令wx-config --static --cflagsOther compiler options中不被识别,wx-config --static --libsOther linker options中不被识别。

即使我在主目录的 .bashrc 文件中添加 wx-config 文件的路径,即 export PATH="$PATH:/usr/i686-w64-mingw32/bin",问题仍然存在。那时我可以在任何位置从终端 运行 wx-config。

为了解决这个问题,我在 Other compiler options 中将选项更改为 /usr/i686-w64-mingw32/bin/wx-config --static --cflags,在 Other linker options 中将选项更改为 /usr/i686-w64-mingw32/bin/wx-config --static --libs。这很有魅力。

我在 Link libraries 中添加了 libstdc++-6.dll 的位置(只是通过在文件管理器中搜索找到它),并且在中添加了标志 -static-static-libgcc Other linker options 最后按照 Igor 的建议用最小样本进行了测试。只需创建新的控制台应用程序,向其添加 minimal.cpp 文件以及上述所有内容。

编译器做了一个我用wine成功打开的Minimal.exe文件。

注意:我在问题中提到的所有包含目录都在编译器的 wx-config --cflags 和链接器的 wx-config --libs 中,因此无需将它们添加到搜索目录中。