CodeBlocks有关组件问题?
在codeblocks中可以编译成功并且可以运行,但是在debug情况下生成.exe文件不可以运行,提示缺少wxmsw28ud_gcc.dll这个组件,当我把这个组件放在与.exe文件同一个文件夹时又可以运行, 这个组件有90M,本来程序就很小,这样肯定不行,不知道这个问题怎么解决? 还有在release中生成的.exe文件也是出现这种情况,提示缺少wxmsw28u_gcc.dll这个组件,请各位老鸟,大虾门帮忙怎么解决?
开发环境是windowsxp+codeblocks+wxWidgets2.8
[解决办法]
这个是你自己编译的吧。你用MinGW自带的strip给它减肥看看。
另外,即使有调试信息,也不应该这么大的。
我这里用-Os编译,只有6MB左右。
这是我编译的参数,供参考:
--------------------------
2.8.x
--------------------------
VC版本:
修改 makefile.vc 文件:区分大小写搜索"_vc",替换成""
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=release SHARED=0 UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=1 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=debug SHARED=0 UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=0 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
GCC版本:
修改makefile.gcc文件:区分大小写搜索"_gcc",替换成""
mingw32-mingw32-make -f makefile.gcc CPPFLAGS=-Os LDFLAGS=-s SHARED=1 BUILD=debug UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=1 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
mingw32-mingw32-make -f makefile.gcc CPPFLAGS=-Os LDFLAGS=-s SHARED=1 BUILD=release UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=0 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
VC版本:
修改 makefile.vc 文件:区分大小写搜索"_vc",替换成""
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=release SHARED=0 UNICODE=1 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=debug SHARED=0 UNICODE=1 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
GCC版本:
修改makefile.gcc文件:区分大小写搜索"_gcc",替换成""
mingw32-make -f makefile.gcc CPPFLAGS=-Os LDFLAGS=-s SHARED=1 BUILD=debug UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=1 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
mingw32-make -f makefile.gcc CPPFLAGS=-Os LDFLAGS=-s SHARED=1 BUILD=release UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=0 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
--------------------------
2.9.x
--------------------------
GCC版本:
修改makefile.gcc文件:区分大小写搜索"_gcc"
mingw32-make -f makefile.gcc CPPFLAGS=-Os LDFLAGS=-s SHARED=1 BUILD=debug UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=1 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
mingw32-make -f makefile.gcc CPPFLAGS=-Os LDFLAGS=-s SHARED=1 BUILD=release UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=0 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
VC版本:
修改makefile.vc文件:区分大小写搜索"_vc"
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=debug SHARED=0 UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=1 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
nmake -f makefile.vc CPPFLAGS=/Os LDFLAGS="/MANIFEST:NO /OPT:REF /OPT:ICF" BUILD=release SHARED=0 UNICODE=1 DEBUG_INFO=0 DEBUG_FLAG=0 MONOLITHIC=1 OFFICIAL_BUILD=1 RUNTIME_LIBS=static >nul
[解决办法]
因为这个DLL里有所有的debug信息,以及一些没用的东西,便于调试的。
很正常。发布时用release版本的DLL即可。
用我的方法,可以把DLL减小到6MB左右。
其实编译wx非常简单的。
[解决办法]
你想怎么解决,dll就是这样的啊,C::B里能直接运行,是因为直接把dll所在目录归到了搜索目录,在C::B外不能运行,是因为dll目录不在系统path中,你可以把缺少的dll复制到 path目录,比如c:\windows\system之类。
如果你不想依赖dll,那么就采用静态链接形式,代价是exe体积增大。