交叉编译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的应用程序存在以下几个问题:
-
编译器给我的错误(当它发生--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库的几个不同的构建选项,但对结果没有影响。所以请,有人帮忙!
我也注意到运行./config.guess
构成wxWidgets下载目录给我x86_64-unknown-linux-gnu
。因此,这意味着我应该使用x86_64-w64-mingw32
编译器,而不是i686-w64-mingw32
(我在/usr/x86_64-w64-mingw32
安装这一项)?
所以主要问题是Other compiler options
中没有识别到命令wx-config --static --cflags
,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-libgcc
在Other linker options
标志-static
和最后没有用最少的样品为测试作为伊戈尔建议。只需创建新的控制台应用程序,添加minimal.cpp
文件以及上述所有内容。
编译器做了一个Minimal.exe
文件,我用wine成功打开过。
注意:我在我的问题中提到的所有包含的目录在编译器中分别为wx-config --cflags
和链接器中的wx-config --libs
,因此不需要将它们添加到搜索目录中。
在“其他编译器选项”中输入命令时,应该使用'(反引号)。 I.e .:'(反引号)wx-config --cxxflags(反向)''。如果这些没有反引号的命令从终端成功执行,那么你应该在C :: B选项对话框中使用反引号。那么一切都会很好。另外,请确保系统上没有安装其他wx,因为您已将PATH添加到wx-config中,最后添加到.bashrc中的PATH变量中。 – Igor
你有另一个wxWidgets安装/编译?我的猜测是,它会选择你已经安装在系统上的那个,并且由于你把PATH放在这个系统的最后,系统永远不会找到它。尝试从终端运行'wx-config --cxxflags',看看输出是什么。 – Igor
@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
为什么要交叉编译,而不是直接在Windows上构建(使用mingw?) –
我认为你会发现有一台Windows机器(可能是一台VM)用于开发和测试的目的要容易得多。 –
@MartinBonner当然,它会更容易,但我不想支付许可证或做一些非法的东西:-)。 – Pekov