无法构建新的 wxWidgets。我应该怎么办?
Can't build the new wxWidgets. What should i do?
我感觉有点笨,但我无法构建新的 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.8.1\include\c++\cmath:44:0,
from c:\sviluppo\tools\mingw\lib\gcc\mingw32.8.1\include\c++\random:38,
from c:\sviluppo\tools\mingw\lib\gcc\mingw32.8.1\include\c++\bits\stl_algo.h:65,
from c:\sviluppo\tools\mingw\lib\gcc\mingw32.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>
The installer make me download the TDM-GCC-64 setup and install it.
CodeLite 建议...
What should i do now?
像这样构建 wxWidgets:
下载 wxWidgets 源代码https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.0/wxWidgets-3.1.0.7z
中的描述构建 wxWidgets
- 安装一个像样的编译器(推荐:MinGW TDM-GCC 5.X系列)
- 当您打开
CMD
构建时,输入:
set path=\path\to\MinGW\bin;%path%
构建wxWidgets后,需要在CodeLite中设置2个环境变量:(Settings->Environment variables):
WXCFG=gcc_dll\mswu
WXWIN=\path\to\wxWidgets
如果您尝试在 CodeLite 中构建项目的 Debug
配置,您应该执行以下 ONE 操作:
构建一个debug
版本的wxWidgets(这是CodeLite会搜索的)
或
从编译器中删除 --debug
标志和 linker 选项:
- Project Settings->Compiler->C++ Compiler Options,然后删除显示
--debug=yes
或只是 --debug
的部分
- Project Settings->Linker->Linker options,然后删除显示
--debug=yes
或只是 --debug
的部分
编辑:
更新 CodeLite 的维基页面 link
编辑2:
在答案
中添加了 PATH
说明
编辑3:
添加了有关如何设置环境变量 WXCFG 和 WXWIN
的说明
埃兰
至于今天,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
makefile.gcc
在使用并行 make(即 -j8
)时存在错误。解决方法是做
mingw32-make <all the same options> setup_h
首先是正常的 make 命令。另一种选择是使用不会遇到此问题的基于配置的构建。
_hypot()
的编译问题是由编译器错误引起的,我们已尝试在 this commit, but apparently it wasn't enough. You should report 中解决该问题,并提供更多详细信息,包括您使用的编译器版本和传递给 make 的选项。
我在使用这个命令时遇到了类似的问题
mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release
VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11"
MONOLITHIC=1
问题是 -j8
,它在构建过程开始之前考虑了物理处理器的数量。
尝试-jN
(将N替换为NUMBER_OF_PROCESSORS
的值)
mingw32-make 查看物理处理器的实际数量,不考虑超线程或虚拟处理器。但是,如果您的计算机分配的物理处理器少于分配的物理处理器,则会导致错误。
您也可以尝试将 -j
放入 make arguments 字段。如果你有足够的 RAM 和 CPU 来处理它,这告诉 Make 产生尽可能多的编译进程,它应该比单个编译更快。
我在具有 4 个物理处理器的 i7 上成功地尝试了 -j4。
(注意:当打开超线程时,i7 显示 8 个虚拟处理器)
东方here
提到了类似的东西
提到了 Brendan Shanks 的更好解释 here。
我感觉有点笨,但我无法构建新的 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.8.1\include\c++\cmath:44:0,
from c:\sviluppo\tools\mingw\lib\gcc\mingw32.8.1\include\c++\random:38,
from c:\sviluppo\tools\mingw\lib\gcc\mingw32.8.1\include\c++\bits\stl_algo.h:65,
from c:\sviluppo\tools\mingw\lib\gcc\mingw32.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>
The installer make me download the TDM-GCC-64 setup and install it.
CodeLite 建议...
What should i do now?
像这样构建 wxWidgets:
下载 wxWidgets 源代码https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.0/wxWidgets-3.1.0.7z
- 中的描述构建 wxWidgets
- 安装一个像样的编译器(推荐:MinGW TDM-GCC 5.X系列)
- 当您打开
CMD
构建时,输入:set path=\path\to\MinGW\bin;%path%
构建wxWidgets后,需要在CodeLite中设置2个环境变量:(Settings->Environment variables):
WXCFG=gcc_dll\mswu
WXWIN=\path\to\wxWidgets
如果您尝试在 CodeLite 中构建项目的 Debug
配置,您应该执行以下 ONE 操作:
构建一个debug
版本的wxWidgets(这是CodeLite会搜索的)
或
从编译器中删除 --debug
标志和 linker 选项:
- Project Settings->Compiler->C++ Compiler Options,然后删除显示
--debug=yes
或只是--debug
的部分
- Project Settings->Linker->Linker options,然后删除显示
--debug=yes
或只是--debug
的部分
编辑: 更新 CodeLite 的维基页面 link
编辑2: 在答案
中添加了PATH
说明
编辑3: 添加了有关如何设置环境变量 WXCFG 和 WXWIN
的说明埃兰
至于今天,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
makefile.gcc
在使用并行 make(即 -j8
)时存在错误。解决方法是做
mingw32-make <all the same options> setup_h
首先是正常的 make 命令。另一种选择是使用不会遇到此问题的基于配置的构建。
_hypot()
的编译问题是由编译器错误引起的,我们已尝试在 this commit, but apparently it wasn't enough. You should report 中解决该问题,并提供更多详细信息,包括您使用的编译器版本和传递给 make 的选项。
我在使用这个命令时遇到了类似的问题
mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" MONOLITHIC=1
问题是 -j8
,它在构建过程开始之前考虑了物理处理器的数量。
尝试-jN
(将N替换为NUMBER_OF_PROCESSORS
的值)
mingw32-make 查看物理处理器的实际数量,不考虑超线程或虚拟处理器。但是,如果您的计算机分配的物理处理器少于分配的物理处理器,则会导致错误。
您也可以尝试将 -j
放入 make arguments 字段。如果你有足够的 RAM 和 CPU 来处理它,这告诉 Make 产生尽可能多的编译进程,它应该比单个编译更快。
我在具有 4 个物理处理器的 i7 上成功地尝试了 -j4。
(注意:当打开超线程时,i7 显示 8 个虚拟处理器)
东方here
提到了类似的东西提到了 Brendan Shanks 的更好解释 here。