首先多谢大家的博客和前辈:老鹰2498472937的提点,要不然不知道还要在环境上花费多少时间。
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)通过设置