December 2013 Blog Posts

使用mingw来编译boost jam

MitchellChu 2013-12-31 其他技术 编程语言

由于编译是需要使用bjam(本文是单独编译boost jam 3.1.18)的,而bjam的只是源代码而已,因此,编译boost的第一步就需要编译bjam。不过的编译还是相对简单,Windows下只需要double click根目录下的build.bat即可。当然,直接双击,在没有对应环境的前提下还是不可能编译成功的。如果是安装有Visual Studio(使用VC),一般是可以成功的,如果不成功到VC目录下运行VCVARS32.bat应该问题就不是很大了。当然,我们也可以指定编译选项 —— 而我机器上有和VS,默认使用VS,但我更想它使用Mingw来编译。

因此,在cmd下输入:

#注意,需要路由到build.bat的这个目录下 
#Build.bat 支持的参数有: 
# borland, como, gcc, gcc-nocygwin, 
# intel-win32, metrowerks, mingw, 
# msvc, vc7, vc8, vc9, vc10

build.bat mingw

要这个顺利进行,请保证下面这些地方已经处理妥当:

1. Mingw是安装在C:\MinGW下,如果不是,需要打开build.bat修改

###在build.bat中找到下面的代码

if EXIST "C:\MinGW\bin\gcc.exe" (
    set "BOOST_JAM_TOOLSET=mingw"
    set "BOOST_JAM_TOOLSET_ROOT=C:\MinGW\"
    goto :eof)

#### 将路径修改成MinGW实际所在路径,如我的测试路径
if EXIST "D:\Env\MinGW\bin\gcc.exe" (
    set "BOOST_JAM_TOOLSET=mingw"
    set "BOOST_JAM_TOOLSET_ROOT=D:\Env\MinGW\"
    goto :eof)

2. 保证MinGW的bin目录已经添加到系统环境变量中,因为后继编译需要使用gcc。

3. 如果是在Cmd中执行build.bat,请保证命令行的当前路径是build.bat所在根目录 —— 这在需要传递参数给build.bat的时候很重要。

MinGW生成C可执行文件,运行报dll丢失

MitchellChu 2013-12-30 其他技术 Unix & Linux 编程语言

下使用g++.exe/gcc.exe编译出来的可执行文件,在运行时报libgcc_s_dw2-1.dll丢失的错:

无法启动此程序,因为计算机中丢失libgcc_s_dw2-1.dll。尝试重新安装该程序已解决此问题。

这个问题的原因是因为编译器在默认的情况下使用的不是静态关联,所以在执行文件下没有找到该DLL就会导致这个报错。最简单的解决方法是将此DLL直接放入到可执行文件的同目录下即可,当然,还有可能会报:

无法启动此程序,因为计算机中丢失libstdc++-6.dll。尝试重新安装该程序已解决此问题。

这种情况下,只能再次把丢失的DLL拷贝到可执行文件的目录下,这样问题就能得到解决。

虽然上面的方法能够解决这个问题,但每次新项目之后都需要将这些文件放入到部署文件夹。如果对这种方式不太满意,你可以考虑在编译的时候加入:-static-libgcc -static-libstdc++

g++.exe source_files -o target_file -static-libgcc -static-libstdc++

这将直接告诉,使用静态链接来处理关联。编译之后,就不需要再次将DLL文件拷贝到可执行文件的目录中。

如果你是使用来编译,也可以在CMakeLists.txt中添加这两个参数:

project(projectName)
cmake_minimum_required(VERSION 2.8)
#......
### 添加下面这段代码
if(WIN32)
    set(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++")
endif(WIN32)
### 添加结束
#.....
#其他代码

这样在编译的时候,就能自动添加这两个参数到编译器上。

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。