交叉编译wxWidgets的代码从Linux到的Windows

问题描述:

我使用Code :: Blocks的IDE与Debian的8.9杰西(X86-64)wxWidgets的。
当我使用GNU GCC编译一切正常,因此编译好的wxWidgets的可执行的Linux版本。
但我需要让我的程序在Windows平台上工作,所以我必须进行交叉编译。
我已经安装的mingw32跟着交叉编译指令给出 here
我做了我的wxWidgets构建配置如下:交叉编译wxWidgets的代码从Linux到的Windows

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

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

+0

为什么要交叉编译,而不是直接在Windows上构建(使用mingw?) –

+1

我认为你会发现有一台Windows机器(可能是一台VM)用于开发和测试的目的要容易得多。 –

+2

@MartinBonner当然,它会更容易,但我不想支付许可证或做一些非法的东西:-)。 – Pekov

所以主要问题是Other compiler options中没有识别到​​命令wx-config --static --cflagswx-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 --libsOther linker options。这起到了魅力。

我添加的libstdc++-6.dll位置(简单地发现它在文件管理器搜索)在Link libraries-static-libgccOther linker options标志-static和最后没有用最少的样品为测试作为伊戈尔建议。只需创建新的控制台应用程序,添加minimal.cpp文件以及上述所有内容。

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

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

+1

在“其他编译器选项”中输入命令时,应该使用'(反引号)。 I.e .:'(反引号)wx-config --cxxflags(反向)''。如果这些没有反引号的命令从终端成功执行,那么你应该在C :: B选项对话框中使用反引号。那么一切都会很好。另外,请确保系统上没有安装其他wx,因为您已将PATH添加到wx-config中,最后添加到.bashrc中的PATH变量中。 – Igor

+0

你有另一个wxWidgets安装/编译?我的猜测是,它会选择你已经安装在系统上的那个,并且由于你把PATH放在这个系统的最后,系统永远不会找到它。尝试从终端运行'wx-config --cxxflags',看看输出是什么。 – Igor

+0

@Igor终端的输出是:'-I/usr/i686-w64-mingw32/lib/wx/include/i686-w64-mingw32-msw-unicode-static-3.1 -I/usr/i686-w64-mingw32 /include/wx-3.1 -D_FILE_OFFSET_BITS = 64 -D__WXMSW__ -mthreads'。我认为这是'i686-w64-mingw32'编译器的正确选择。但看起来你是对的,突触显示我安装了另一个版本的wxWidgets,即似乎与C :: B一起安装的'libwxgtk3.0-0'我认为(不确定它),可能这是错误! – Pekov