以前学习stlport的时候,安装了stlport到vs2008里面,最近在学习cocos2d-x的时候,发现在2.0版本上还是没有问题的,但是当升级到3.0版本后,需要使用vs2012以支持c++11的新特性,固同时安装了vs2012,但是出现编译中各种stlport冲突的问题,在新建的vc文件中,用到的一些c++11的新特性或者冲boost继承过来的特性也会产生编译不通过的问题。找了很多资料都没有解决,最后还是自己分析分析原因,多尝试了一些办法最后得到了很好地解决。
思来想去觉得还是包含文件的问题,因为在当时安装stlport的时候就遇到过这样的问题,会和c++标准库的问题件产生冲突,固在vs++目录中的库目录和包含目录中把stlport的相关stlport目录和lib目录放在了继承目录的上面,提高了他们的优先级。固当遇到stl编译冲突的时候可以在不删除stlport(以后随时可以用)的情况下通过降低stlport相关的目录优先级来解决。
由于在vs2012中不能按照以前版本的直接修改这几个vs++的包含目录,固需要找到相关方法来解决,既可以通过在项目的属性管理器中点击debug|win32下的Microsoft.Cpp.Win32.user来找到相关的设置,把stlport相关的设置从相关的库目录和包含目录中删除即可,在vs2008中可以直接在属性找到降级即可。
相关设置后效果如下
在运行相关的编译冲突处即可顺利通过编译,解决了我纠结好一阵子的问题。希望能帮助到遇到这困惑的朋友。下面是当我没有取消stlport时使用c++11的function函数提示没有模板错误,不能通过编译,在取消相关的stlport目录后vs2012成功找到相关的std::function,完成编译成功运行,如下图所示:
可以发现function已经找到相关的定义,不在提示找不到模板的错误。
此法可以解决编译stlport与c++11冲突的问题,特别是在vs2012的环境下,希望能帮助到遇到相同问题的朋友。