首页 > 代码库 > STLport-5.2.1 STL port配置; cl.exe 编译cpp:ms和cygwin两种模式;cygwin环境配置和使用、GCC编译入门
STLport-5.2.1 STL port配置; cl.exe 编译cpp:ms和cygwin两种模式;cygwin环境配置和使用、GCC编译入门
1、在ms中要使用windows sdk和相关的lib设置实在太麻烦啦,以及dll等文件缺失是在严重。所以我简单地利用了vs安装目录下的批处理文件,在命令窗口中进入:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC ,直接运行vcvarsall.bat加载vs中以及配置好的环境,就可以使用命令行: cl -GX hello.cpp去实现编译并运行。2012版本的vs中-GX换成-EHsc。同理我也可以使用vs2013。目前vs2013的环境我主要用于测试C++11的语法,出现不通过或不是期望结果情况下我才会切换环境。
如果觉得我获得最快的解决方式这篇博客就结束了?
模仿作为人类站在巨人的肩膀上这么神奇的技能,我当然也是不甘落后。
既然vs的环境配置是正确的,就把它的抽出来:
set path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A; set include=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include; set lib=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib; set
目前运行时的dll库(待续。。),应该和path使用同一个路径。 注:可访问本人另外一篇博客介绍vs的路径问题。
而要忽略的路径则需要使用cl的参数去编译,目前还是个小菜,只会使用简单的生成命令,还不会写一个完善的Makefile。
当我用这套环境去尝试着编译STLport工程时,出现cl.exe直接退出的情况。所以最后我还使用了VS自带的环境设置批处理命令:vcvarsall.bat,在vs2012的样例:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat 。在当前的命令窗口中运行此文件,加载环境设置,就可以编译STLport-5.2.1工程。
参考链接:VS2010使用STLport-5.2.1 摘录内容:
configure msvc9(configure msvc10 会显示 Unknown compiler: msvc10, msvc9即可)
定格,时间:2014年11月25号。当前STLport原生工程时没有配置vs2012、vs2013,意味着这个stl库对C++11的支持度不会很高,但是要知道对于C++99/03的标准,VS08、10、12都是兼容的。所以即便我们不是vs08即msvc9的版本,也是可以编译这个工程(不排除有点小语法错误,但是我们都可以凭着自己C++、STL知识去处理这种编译报错,我配置的时候只有语法报错,修改一下就可用了)。
接下来要用到nmake工具,这个时候就发现我自己抽出来的环境编译直接退出。糟糕,忘记记录错误信息啦。待续
基于此情况,我用回了vs自带的编译变量设置,然后完成了STLport-5.2.1的编译。
2、cygwin环境使用
先把参考或者有用的文章标记一下:
百度文库关于cygwin环境介绍 Unix环境cygwin安装以及使用介绍 cygwin安装细节以及gcc编译命令 百度经验中关于STLport开发环境配置文章
GCC-makefile入门 还有一个Makefile入门的教程:跟我一起学写Makefile
基础命令,主要在于利用转义符实现完整路径的输入:
$ cygpath -w /cygwin/c/Program\ Files/Internet\ Explorer/IEXPLORE.EXE c:\Program Files\Internet Explorer\IEXPLORE.EXE
gcc的编译例子如下:
#include<iostream> using namespace std; int main(int argv,char ** argc) { cout<<"hello world,cygwin"<<endl; return 0; }
接下来要使用cygwin的环境去编译目标文件。因为使用stl,必须使用g++的编译命令:g++ hello.cpp //已经在该路径下,未使用命令符操作去编译
编译完成之后,运行发现环境不对,缺少dll。这个问题一般有几种解决方案:
1)复制dll
2)通过设置window path环境变量
3)预编译处理。当前时间点,我尝试着使用了g++ -mno-cygwin hello.cpp去编译,发现编译失败,不支持。待续
3、使用Makefile去编译另外一个小项目,来自参考链接的方式,使用的是我自己的代码
makefile内容:
#jingz's first file to test makeFile allTarget:stdafx_target 11_12_target g++ stdafx.o 11_12.o -o 11_12.exe #remove the object files rm -rf stdafx.o 11_12.o #complie the cpps into objects stdafx_target: g++ -c stdafx.cpp -o stdafx.o 11_12_target: g++ -c 11_12.cpp -o 11_12.o
编译的时候会遇到一些问题,比如标准之间识别问题,tchar的配置问题。需要我们自己去配置可用的STL标准库。
jingzhe@jingzhe-pc /cygdrive/d/Cpp_lab_linux/11_12 $ make g++ -c stdafx.cpp -o stdafx.o g++ -c 11_12.cpp -o 11_12.o 11_12.cpp: 在函数‘int main()’中: 11_12.cpp:23:15: 错误:‘nullptr’在此作用域中尚未声明 int * temp = nullptr; ^ makefile:10: recipe for target '11_12_target' failed make: *** [11_12_target] Error 1
cygwin模拟unix的的UI操作。exe是可执行文件,执行方式和linux的一样./11_12即可打印输出。
下面是转载链接:点击打开链接
(2) configure --with-boost=/lib/boost_1_36_0
# 设置 boost 路径时中间不要有空格,不然后面会很难办
(3) cd build/lib
(4) mingw32-make -f gcc.mak all
# 要用 mingw 带的那个 make,不要用 MSYS 的那个
# 编译好后把 .a 和 .dll 文件分别复制到 stlport/lib 和 stlport/bin
# all 选项默认 build 所有动态库,要编译静态库须如下步指定:
(5) mingw32-make -f gcc.mak release-static dbg-static stldbg-static
# 编译三种静态库。同样把 .a 文件复制到 stlport/lib
(6) 设置 MinGW 的 include:
这个貌似只能在编译时指定参数 -I 和 -L
(7) 使用时的参数
--动态链接:
g++ xxx.cpp -mthreads -I /lib/STLport5.2.1/stlport -L /lib/STLport5.2.1/lib/mingw -lstlport.5.2
--静态链接:
在源文件开头添加:#define _STLP_USE_STATIC_LIB
g++ xxx.cpp -mthreads -I /lib/STLport5.2.1/stlport -L /lib/STLport5.2.1/lib/mingw -lstlport
# 与动态链接版相比最后的库名不带版本号
# 要链接 debug 版只需把最后的库名改为相应名称即可,如 -lstlportg
STLport-5.2.1 STL port配置; cl.exe 编译cpp:ms和cygwin两种模式;cygwin环境配置和使用、GCC编译入门