wxWidgets库在链接器中构建乱码文件名
wxWidgets library build garbled file name in linker
在尝试构建 wxWidgets 3.1.0 库时,出现此错误
ar: gcc_mswu\moolib_fontmap.o: No such file or directory
确实存在拼写略有不同的文件
Directory of C:\Users\James\code\wxwidgets-3.1.0\build\msw\gcc_mswu
2017-01-05 02:01 PM 98,886 monolib_fontmap.o
makefile 中似乎有错字,或者在读取 makefile 时漏掉了一个字母。这可能吗?
例外:如果我将控制台输出重定向到一个文件并在编辑器中打开,则会显示正确的拼写:
因此正确的命令将发送给链接器,但链接器正在查找乱码文件名!
这是我正在做的事情的完整秘诀:
Download wxWidgets source code from https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.0/wxWidgets-3.1.0.7z
Unpack to a folder. On my system, I use C:\Users\James\code\wxwidgets-3.1.0
Open a command window.
cd to the code::blocks mingw folder. On my system this is C:\Program Files (x86)\CodeBlocks16\MinGW
Type mingwvars.bat
cd to wxwidgets folder. On my system C:\Users\James\code\wxwidgets-3.1.0
cd to ./build/msw
Type mingw32-make SHELL=CMD.exe -j4 -f makefile.gcc BUILD=release UNICODE=1 SHARED=0 MONOLITHIC=1
这似乎与提到的问题相同 in the wiki。显然 mingw32-make 中有一个错误,命令行很长,这使得它(有时?)吃掉其中的字符...
是的。应用您发布的 link 中的配方解决了问题。详情如下:
修改makefile.gcc如下:
发件人:
ifeq ($(MONOLITHIC),1)
ifeq ($(SHARED),0)
$(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).a: $(MONOLIB_OBJECTS)
if exist $@ del $@
ar rcu $@ $(MONOLIB_OBJECTS)
ranlib $@
endif
endif
将第二次出现的 $(MONOLIB_OBJECTS) 替换为 gcc_mswu\monolib*.o:
ifeq ($(MONOLITHIC),1)
ifeq ($(SHARED),0)
$(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).a: $(MONOLIB_OBJECTS)
if exist $@ del $@
ar rcu $@ gcc_mswu\monolib*.o
ranlib $@
endif
endif
在尝试构建 wxWidgets 3.1.0 库时,出现此错误
ar: gcc_mswu\moolib_fontmap.o: No such file or directory
确实存在拼写略有不同的文件
Directory of C:\Users\James\code\wxwidgets-3.1.0\build\msw\gcc_mswu
2017-01-05 02:01 PM 98,886 monolib_fontmap.o
makefile 中似乎有错字,或者在读取 makefile 时漏掉了一个字母。这可能吗?
例外:如果我将控制台输出重定向到一个文件并在编辑器中打开,则会显示正确的拼写:
因此正确的命令将发送给链接器,但链接器正在查找乱码文件名!
这是我正在做的事情的完整秘诀:
Download wxWidgets source code from https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.0/wxWidgets-3.1.0.7z
Unpack to a folder. On my system, I use C:\Users\James\code\wxwidgets-3.1.0
Open a command window.
cd to the code::blocks mingw folder. On my system this is C:\Program Files (x86)\CodeBlocks16\MinGW
Type mingwvars.bat
cd to wxwidgets folder. On my system C:\Users\James\code\wxwidgets-3.1.0
cd to ./build/msw
Type mingw32-make SHELL=CMD.exe -j4 -f makefile.gcc BUILD=release UNICODE=1 SHARED=0 MONOLITHIC=1
这似乎与提到的问题相同 in the wiki。显然 mingw32-make 中有一个错误,命令行很长,这使得它(有时?)吃掉其中的字符...
是的。应用您发布的 link 中的配方解决了问题。详情如下:
修改makefile.gcc如下:
发件人:
ifeq ($(MONOLITHIC),1)
ifeq ($(SHARED),0)
$(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).a: $(MONOLIB_OBJECTS)
if exist $@ del $@
ar rcu $@ $(MONOLIB_OBJECTS)
ranlib $@
endif
endif
将第二次出现的 $(MONOLIB_OBJECTS) 替换为 gcc_mswu\monolib*.o:
ifeq ($(MONOLITHIC),1)
ifeq ($(SHARED),0)
$(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).a: $(MONOLIB_OBJECTS)
if exist $@ del $@
ar rcu $@ gcc_mswu\monolib*.o
ranlib $@
endif
endif