我在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
?
答案 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-libgcc
和Other linker options
1}}最后用Igor建议的最小样本进行了测试。只需创建新的控制台应用程序,向其添加minimal.cpp
文件以及上面提到的所有内容。
编译器执行了一个我用wine成功打开的Minimal.exe
文件。
注意:我在问题中提到的所有include目录都在编译器的wx-config --cflags
和链接器的wx-config --libs
中,所以不需要在搜索目录中添加它们。