交叉编译 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应用时,有几个问题:
编译器给我错误(当 --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 库的几个不同的构建选项来解决这个问题,但对结果没有影响。所以,请有人帮忙!
我还注意到 运行ning ./config.guess
形式的 wxWidgets 下载目录给了我 x86_64-unknown-linux-gnu
。因此这意味着我应该使用 x86_64-w64-mingw32
(我在 /usr/x86_64-w64-mingw32
中安装了这个)编译器而不是 i686-w64-mingw32
?
所以主要的问题是命令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。
为了解决这个问题,我在 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
中,因此无需将它们添加到搜索目录中。
我在 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 库的几个不同的构建选项来解决这个问题,但对结果没有影响。所以,请有人帮忙!
我还注意到 运行ning ./config.guess
形式的 wxWidgets 下载目录给了我 x86_64-unknown-linux-gnu
。因此这意味着我应该使用 x86_64-w64-mingw32
(我在 /usr/x86_64-w64-mingw32
中安装了这个)编译器而不是 i686-w64-mingw32
?
所以主要的问题是命令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。
为了解决这个问题,我在 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
中,因此无需将它们添加到搜索目录中。