gpt4 book ai didi

c++ - 从 Linux 到 Windows 交叉编译 wxWidgets 代码

转载 作者:太空狗 更新时间:2023-10-29 12:40:38 24 4
gpt4 key购买 nike

我在 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 应用程序时,存在几个问题:

  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 库构建选项来解决这个问题,但对结果没有影响。所以,请有人帮忙!

我还注意到从 wxWidgets 下载目录运行 ./config.guess 会得到 x86_64-unknown-linux-gnu。因此这意味着我应该使用 x86_64-w64-mingw32(我在 /usr/x86_64-w64-mingw32 中安装了这个)编译器而不是 i686-w64- mingw32?

最佳答案

所以主要问题是 wx-config --static --cflags 命令在 Other compiler optionswx-config 中无法识别 -- static --libsOther 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 > 和 /usr/i686-w64-mingw32/bin/wx-config --static --libsOther linker options 中。这很有魅力。

我在 Link libraries 和标志 中添加了 libstdc++-6.dll 的位置(只是通过在文件管理器中搜索找到它) -static-static-libgccOther linker options 中,最后按照 Igor 的建议用最少的样本进行了测试。只需创建新的控制台应用程序,向其中添加 minimal.cpp 文件以及上述所有内容。

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

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

关于c++ - 从 Linux 到 Windows 交叉编译 wxWidgets 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45544808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com