【问题标题】:Can't build the new wxWidgets. What should i do?无法构建新的 wxWidgets。我该怎么办?
【发布时间】:2016-06-20 05:17:26
【问题描述】:

我感觉有点笨,但我无法构建新的 wxWidgets。 我想使用codelite + mingw + wxWidgets,所以我下载了最新版本:

CodeLite 9.1.3 (http://downloads.codelite.org/downloads.php?windows_weekly_64)

安装程序让我下载 TDM-GCC-64 设置并安装它。

然后我下载了 wxWidgets-3.1.0 (https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.0/wxMSW-3.1.0-Setup.exe)

Codelite 检测到编译器,现在我应该构建 wxWidgets,但我搜索的页面(wxW wiki、codelite 文档等)指的是不存在的文件夹和文件。 一切都安装在默认文件夹中,我不是 PC 菜鸟,虽然可能太习惯于 C++Builder 等环境。

我现在该怎么办?


更新

对不起,我无法说清楚。让我再试一次输出:

C:\wxWidgets-3.1.0\build\msw>mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" MONOLITHIC=1
if not exist gcc_mswudll mkdir gcc_mswudll
if not exist ..\..\lib\gcc_dll mkdir ..\..\lib\gcc_dll
if not exist ..\..\lib\gcc_dll\mswu\wx\setup.h copy ..\..\include\wx\msw\setup.h ..\..\lib\gcc_dll\mswu\wx\setup.h
gcc -c -o gcc_mswudll\wxregex_regcomp.o  -O2 -mthreads  -DHAVE_W32API_H -DNDEBUG -I..\..\include -I..\..\lib\gcc_dll\mswu -D__WXMSW__  -D_UNICODE   -MTgcc_mswudll\wxregex_regcomp.o -MFgcc_mswudll\wxre
gex_regcomp.o.d -MD -MP ../../src/regex/regcomp.c
Impossibile trovare il percorso specificato.
        0 file copiati.
Makefile.gcc:5728: recipe for target '..\..\lib\gcc_dll\mswu\wx\setup.h' failed
mingw32-make: *** [..\..\lib\gcc_dll\mswu\wx\setup.h] Error 1
mingw32-make: *** Waiting for unfinished jobs....
In file included from ..\..\include/wx/defs.h:20:0,
                 from ../../src/regex/regcustom.h:39,
                 from ../../src/regex/regguts.h:38,
                 from ../../src/regex/regcomp.c:33:
..\..\include/wx/platform.h:136:22: fatal error: wx/setup.h: No such file or directory
 #include "wx/setup.h"
                      ^
compilation terminated.
Makefile.gcc:5778: recipe for target 'gcc_mswudll\wxregex_regcomp.o' failed
mingw32-make: *** [gcc_mswudll\wxregex_regcomp.o] Error 1

我可能错了,但在我看来这两行

if not exist ..\..\lib\gcc_dll mkdir ..\..\lib\gcc_dll
if not exist ..\..\lib\gcc_dll\mswu\wx\setup.h copy ..\..\include\wx\msw\setup.h ..\..\lib\gcc_dll\mswu\wx\setup.h

表明有问题。

现在,我自己创建了目录并将 setup.h 复制进去。 在我家它还没有在建造,但我不记得为什么,而现在,在办公室,它开始建造,但以这样的方式结束:

......
g++ -c -o gcc_mswudll\wxscintilla_LexCOBOL.o  -O2 -mthreads  -DHAVE_W32API_H -DNDEBUG -I..\..\src\stc\scintilla\include -I..\..\src\stc\scintilla\lexlib -I..\..\src\stc\scintilla\src -D__WX__ -DSCI_LE
XER -DLINK_LEXERS -I..\..\lib\gcc_dll\mswu -I..\..\include  -D__WXMSW__   -D_UNICODE    -fno-keep-inline-dllexport -std=c++11 -MTgcc_mswudll\wxscintilla_LexCOBOL.o -MFgcc_mswudll\wxscintilla_LexCOBOL.
o.d -MD -MP ../../src/stc/scintilla/lexers/LexCOBOL.cxx
In file included from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\cmath:44:0,
                 from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\random:38,
                 from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h:65,
                 from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\algorithm:62,
                 from ../../src/stc/scintilla/lexers/LexBibTeX.cxx:18:
c:\sviluppo\tools\mingw\include\math.h: In function 'float hypotf(float, float)':
c:\sviluppo\tools\mingw\include\math.h:635:30: error: '_hypot' was not declared in this scope
 { return (float)(_hypot (x, y)); }
                              ^
g++ -c -o gcc_mswudll\wxscintilla_LexCoffeeScript.o  -O2 -mthreads  -DHAVE_W32API_H -DNDEBUG -I..\..\src\stc\scintilla\include -I..\..\src\stc\scintilla\lexlib -I..\..\src\stc\scintilla\src -D__WX__ -
DSCI_LEXER -DLINK_LEXERS -I..\..\lib\gcc_dll\mswu -I..\..\include  -D__WXMSW__   -D_UNICODE    -fno-keep-inline-dllexport -std=c++11 -MTgcc_mswudll\wxscintilla_LexCoffeeScript.o -MFgcc_mswudll\wxscint
illa_LexCoffeeScript.o.d -MD -MP ../../src/stc/scintilla/lexers/LexCoffeeScript.cxx
Makefile.gcc:6183: recipe for target 'gcc_mswudll\wxscintilla_LexBibTeX.o' failed
mingw32-make: *** [gcc_mswudll\wxscintilla_LexBibTeX.o] Error 1
mingw32-make: *** Waiting for unfinished jobs....

C:\wxWidgets-3.1.0\build\msw>

所以,我们仍然没有构建 wxWidgets。


更新

尝试按照答案中的建议进行调试构建。 这是输出:

C:\wxWidgets-3.1.0\build\msw> mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=
1 BUILD=debug VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" MONOLIT
HIC=1
if not exist gcc_mswuddll mkdir gcc_mswuddll
if not exist ..\..\lib\gcc_dll\mswud mkdir ..\..\lib\gcc_dll\mswud
if not exist ..\..\lib\gcc_dll\mswud\wx\setup.h copy ..\..\include\wx\msw\setup.
h ..\..\lib\gcc_dll\mswud\wx\setup.h
gcc -c -o gcc_mswuddll\wxregex_regcomp.o -g -O0 -mthreads  -DHAVE_W32API_H -DNDE
BUG -I..\..\include -I..\..\lib\gcc_dll\mswud -D__WXMSW__  -D_UNICODE   -MTgcc_m
swuddll\wxregex_regcomp.o -MFgcc_mswuddll\wxregex_regcomp.o.d -MD -MP ../../src/
regex/regcomp.c
Impossibile trovare il percorso specificato.
        0 file copiati.
Makefile.gcc:5728: recipe for target '..\..\lib\gcc_dll\mswud\wx\setup.h' failed

mingw32-make: *** [..\..\lib\gcc_dll\mswud\wx\setup.h] Error 1
mingw32-make: *** Waiting for unfinished jobs....
In file included from ..\..\include/wx/defs.h:20:0,
                 from ../../src/regex/regcustom.h:39,
                 from ../../src/regex/regguts.h:38,
                 from ../../src/regex/regcomp.c:33:
..\..\include/wx/platform.h:136:22: fatal error: wx/setup.h: No such file or dir
ectory
compilation terminated.
Makefile.gcc:5778: recipe for target 'gcc_mswuddll\wxregex_regcomp.o' failed
mingw32-make: *** [gcc_mswuddll\wxregex_regcomp.o] Error 1

文件在那里,所以我不知道是什么问题......

C:\wxWidgets-3.1.0\build\msw>dir ..\..\src\regex\regcomp.*
 Il volume nell'unità C è 1TBWD-1-WIN7 64
 Numero di serie del volume: A26D-1E3B

 Directory di C:\wxWidgets-3.1.0\src\regex

28/02/2016  22:33            59.702 regcomp.c
               1 File         59.702 byte
               0 Directory  74.986.561.536 byte disponibili

C:\wxWidgets-3.1.0\build\msw>

【问题讨论】:

    标签: mingw wxwidgets codelite


    【解决方案1】:

    我在使用这个命令时遇到了类似的问题

    mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release 供应商=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" 单片机=1

    问题是 -j8,它会在构建过程开始之前考虑物理处理器的数量。

    试试 -jN(将 N 替换为 NUMBER_OF_PROCESSORS 的值)

    mingw32-make 查看物理处理器的实际数量,不考虑超线程或虚拟处理器。但是,如果您的机器分配的物理处理器数量不足,则会导致错误。

    您也可以尝试将 -j 放入 make arguments 字段。这告诉 Make 如果你有足够的 RAM 和 CPU 来处理它,它会产生尽可能多的编译进程,它应该比单个编译更快。

    我在具有 4 个物理处理器的 i7 上成功尝试了 -j4

    (注意:开启超线程时,i7 显示 8 个虚拟处理器)

    东方here提到了类似的东西

    提到了 Brendan Shanks 的更好解释 here

    【讨论】:

    • 问题确实是因为-jN作为already mentioned的使用,但是解释在很多层面上都是完全错误的(mingw32-make不是编译器,核心号检测没有在这里发挥作用,所有逻辑核心都将被计算在内,并且-j4 也可以很好地发生问题,只是发生的可能性要小一些)。
    • 我知道问题“jN”已经被提及,但没有明确的解决方法或解决直接问题的方法。我编写解决方案的唯一原因是帮助人们轻松解决这个问题。我的反复试验表明我使用“j8”失败了,但同样的命令对“j4”有效。看看这个解决方案link,它清楚地提到了类似的东西。
    • 上面的already linked answer 给出了解决此问题的方法。
    【解决方案2】:

    在使用并行 make 时,makefile.gcc 中存在一个错误(即使用 -j8)。一种解决方法是做

    mingw32-make <all the same options> setup_h
    

    首先是正常的 make 命令。另一种选择是使用不会遇到此问题的基于配置的构建。

    _hypot() 的编译问题是由编译器错误引起的,我们已尝试在this commit 中解决它,但显然这还不够。您应该 report 提供更多详细信息,包括您使用的编译器版本和传递给 make 的选项。

    【讨论】:

      【解决方案3】:

      安装程序让我下载 TDM-GCC-64 设置并安装它。

      CodeLite 建议...

      我现在该怎么办?

      像这样构建 wxWidgets:

      构建wxWidgets后,需要在CodeLite中设置2个环境变量,从:(Settings->Environment variables):

      WXCFG=gcc_dll\mswu WXWIN=\path\to\wxWidgets

      如果您尝试在 CodeLite 中构建项目的 Debug 配置,您应该执行以下一项操作:

      构建一个debug 版本的 wxWidgets(这是 CodeLite 将搜索的内容)

      从编译器和链接器选项中删除 --debug 标志:

      1. Project Settings->Compiler->C++ Compiler Options,去掉--debug=yes或者--debug的部分
      2. Project Settings->Linker->Linker options,去掉--debug=yes或者--debug的部分

      编辑: 更新 CodeLite 的 wiki 页面链接

      编辑2: 在答案中添加了PATH 说明

      编辑3: 添加了关于如何设置环境变量 WXCFG 和 WXWIN 的说明

      伊兰

      【讨论】:

      • .7z 文件包含与安装程序完全相同的文件。链接页面是我试图遵循的。 - \path\to\wxwidgets\lib\gcc_dll\ 中没有文件夹(gcc_dll 是由 build 命令创建的,但其中没有任何内容) - 只有 setup.h 文件位于“include”文件夹中。我的意思是:在打开这个问题之前,我完全同意你告诉我要做的事情:)
      • codelite.org/Developers/BuildingWxWidgetsWin#toc2 上有一个大注释,开头是“If the file \path\to\wxwidgets\lib\gcc_dll\mswu\wx\setup.h....”,基本上是什么说:“开始构建,等待几秒钟,然后取消它”,你会发现setup.h文件
      • 我更新了我的答案:我在 wiki 中添加了新部分(在我的原始答案中更新了链接) - 由于您不打算构建 CodeLite,您可以跳过一些步骤 - wiki 页面更新为新部分“为通用目的构建 wxWidgets”
      • 更新了问题,因为评论太长了。
      • 这似乎是一个永无止境的故事。擦除所有内容并重新安装 wxWidgets,从干净的情况开始,并尝试构建它们的调试版本。这次它创建了正确的文件夹,但随后在 regcomp.c 上停止。文件在那里,我不明白这次出了什么问题。使用输出更新问题。
      【解决方案4】:

      至于今天,build忘记做两个目录。 解决方案是在构建之前自己制作它们。

      所以我的解决方案是转到您的 wxWidget 文件夹并输入:

      C:\wxWidgets-3.1.0>mkdir lib\gcc_dll\mswu\wx\
      C:\wxWidgets-3.1.0>copy include\wx\msw\setup.h lib\gcc_dll\mswu\wx\setup.h
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-11
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多