从Linux到Windows交叉编译wxWidgets代码

时间:2017-08-07 10:31:20

标签: c++ linux cross-compiling wxwidgets

我在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

  4. 我努力用wxWidgets库的几个不同的构建选项修复它,但对结果没有影响。所以请有人帮忙!

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

1 个答案:

答案 0 :(得分:0)

因此,主要问题是wx-config --static --cflags无法识别Other compiler options命令,wx-config --static --libs无法识别Other linker options

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

要解决此问题,我已将选项更改为/usr/i686-w64-mingw32/bin/wx-config --static --cflags中的Other compiler options/usr/i686-w64-mingw32/bin/wx-config --static --libs中的Other linker options。这充当了魅力。

我在libstdc++-6.dll中添加了Link libraries的位置(只是在文件管理器中找到了它),-static中的标记为-static-libgccOther linker options 1}}最后用Igor建议的最小样本进行了测试。只需创建新的控制台应用程序,向其添加minimal.cpp文件以及上面提到的所有内容。

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

注意:我在问题中提到的所有include目录都在编译器的wx-config --cflags和链接器的wx-config --libs中,所以不需要在搜索目录中添加它们。