【问题标题】:Cross compile on C::B from linux to win miss wxwidgets codes?从 linux 在 C::B 上交叉编译以赢得 wxwidgets 小姐的代码?
【发布时间】:2014-01-17 07:15:20
【问题描述】:

在 Ubuntu 13.10、x86 上,使用 CodeBlocks 我已经成功地使用 minigw 从 unix 交叉编译到 Windows。在 windows 上测试并得到一个控制台。

它不适用于 wxwidgets。在 ubuntu 下工作正常,但它不会为 minigw 编译器编译 wxwidgets。

我已经这样做了:Code::Blocks and Cross Compilers 并使用控制台工作

但不适用于 wxwidgets。它引发了如下错误:

-------------- Build: Release in testwindows (compiler: MiniGW compiler for windows)---------------

i586-mingw32msvc-g++ -I/usr/lib/i386-linux-gnu/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread  -Wall  -O2  -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -DSTRICT -DHAVE_W32API_H -D__WXMSW__ -D__WINDOWS__   -I/usr/i586-mingw32msvc/include  -c /data1/backup_config/codeblocks/Learn/testwindows/testwindowsApp.cpp -o obj/Release/testwindowsApp.o
i586-mingw32msvc-g++: unrecognized option '-pthread'
In file included from /usr/include/wx-2.8/wx/platform.h:293,
                 from /usr/include/wx-2.8/wx/defs.h:21,
                 from /usr/include/wx-2.8/wx/event.h:15,
                 from /usr/include/wx-2.8/wx/app.h:20,
                 from /data1/backup_config/codeblocks/Learn/testwindows/testwindowsApp.h:13,
                 from /data1/backup_config/codeblocks/Learn/testwindows/testwindowsApp.cpp:10:
/usr/include/wx-2.8/wx/chkconf.h:23:30: error: wx/msw/chkconf.h: No such file or directory

报错时的源代码:

#elif defined(__WXMSW__)
#  include "wx/msw/chkconf.h"
#elif defined(__WXMAC__)

所以,我检查了 /usr/include/wx/chkconfig.h 上的文件 chkconf.h 并且它存在。但是,# 中默认提供的代码块包括“wx/msw/chkconf.h”

如何解决此问题以使用 CodeBlocks 和 wxwidgets 2.8 正确交叉编译?

【问题讨论】:

  • 交叉编译如果平台不能支持编译器。交叉编译到windows只是无缘无故地让自己头疼。所以不要这样做:在 windows 上为 windows 编译。

标签: c++ linux wxwidgets codeblocks


【解决方案1】:

也许对你来说为时已晚,但这肯定会对其他人有所帮助。所以,就这样吧。

首先,您必须安装正确的工具链(进入终端并输入):

sudo apt-get install mingw32

然后,您需要在 Ubuntu 上使用 windows 工具链编译一个“windows”版本的 wxWidgets。这适用于当前的 wxWidgets 版本(3.0),但也适用于以前的版本。我还假设:

  • wxWidgets的源代码安装在home目录(~/wxWidgets-3.0.0)。
  • 在 ~/LocalLibs/wx-3.0.0_win 中有一个准备存储库的目录。
  • 您可以根据需要更改版本/路径,相应地修改以下命令。
  • 所有编译工具(gcc 和库)都已安装。

所以,过程如下(在终端窗口上):

cd ~/wxWidgets-3.0.0
mkdir build_win
cd build_win/
../configure --host=i586-mingw32msvc --build=i586-linux --with-mingw --disable-shared --prefix="$HOME/LocalLibs/wx-3.0.0_win"
make
make install

然后,您可以检查是否一切顺利:

"$HOME/LocalLibs/wx-3.0.0_win/bin/wx-config" --host=i586-mingw32msvc --static --cxxflags  --debug=yes --unicode=yes --version=3.0

如果一切正常,它将显示与 wxWidgets 交叉编译所需的库。

最后是 C::B 部分(我个人更喜欢 Codelite,但无论如何)。首先,创建一个新的编译器选项(设置 -> 编译器)并复制或重命名其中一个。

然后,进入“Toolchain executables”,设置如下:

C Compiler:         i586-mingw32msvc-gcc
C++ Compiler:       i586-mingw32msvc-g++
Linker dynamic:     i586-mingw32msvc-g++
Linker static:      i586-mingw32msvc-ar
Resource compiler:  `~/LocalLibswx-3.0.0_win/bin/wx-config --host=i586-mingw32msvc --rescomp`

最后,在“搜索目录”中:

Compiler:       /usr/i586-mingw32msvc/include/
Linker:         /usr/i586-mingw32msvc/lib/
Resource:       /usr/i586-mingw32msvc/include/

我想这就是全部。之后,您应该能够使用新的交叉编译器使用 wxWdigets 进行编译,并在 Ubuntu 中轻松愉快地生成 Windows 可执行文件。

【讨论】:

  • 非常好的教程和很好的指南。但是,它在--host=i586-mingw32msvc 上失败了
  • @MarinSagovac 你确定安装了 mingw32 吗?你有哪个CPU?你能检查一下 /usr 下一些 *mingw32 目录的名称吗?在命令的 --host= 部分中使用该目录名称。
猜你喜欢
  • 2018-01-14
  • 2015-06-14
  • 2013-10-24
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
相关资源
最近更新 更多