我在Visual Studio 2008中有一个c ++和一个c#项目.c ++项目使用在VS2005中构建的API。我需要那个c ++项目来引用VS2005中的标准库文件。编译器搜索包含目录的顺序始终指向VS2008中的包含文件,特别是向量文件。当它在引用VS2008中的矢量文件时在Release中运行时会崩溃程序。如何强制c ++项目使用VS2005中的include目录?
答案 0 :(得分:0)
这是一个彻头彻尾的黑客攻击,但您可以通过替换来明确包含vector的特定实现:
#include <vector>
...与:
#include "C:\Program Files (x86)\Microsoft Visual Studio 8.0\VC\include"
但是如果你需要你的VS2008项目使用旧版本的STL,那么我闻到了一些非常糟糕的东西。也许是你的DLLs don't seperate the interface from the implementation?
答案 1 :(得分:0)
如果你想使用VS2005标头,你真的应该用VS2005构建。你可以通过摆弄包含文件路径来解决问题,但是我会期待很多麻烦。我确定它不受支持,如果标题想要从CRT库中提取任何东西(即,你正在使用的东西恰好不是仅限标题的东西)它可能不会很好地工作,如果有的话
答案 2 :(得分:0)
您可以尝试以下两种方法。
首先,将<vector>
的VS2005版本重命名为<vector_vs8>
。添加此目录的包含路径,然后更改
#include <vector>
...到
#include "vector_vs8"
第二次,更改一些项目设置,仅使用VS8包括而不是VS9包括:
项目&gt;设置&gt;配置属性&gt; C / C ++&gt;常规&gt;其他包含目录设置为指向VS2005的包含目录。这将包括所有vs2005文件,而不仅仅是<vector>
*项目&gt;设置&gt;配置属性&gt; C / C ++&gt;预处理器&gt; *忽略标准包含路径设置为 TRUE
答案 3 :(得分:0)
如果程序在发布版本中崩溃,问题可能在于你的代码而不是库代码,并且恢复到VS2005只会让你头疼。此外,问题可能与编译器代码生成而不是编译器库有关,因此使用VS2010和VS2005的混合可能无法解决问题,我想说可能会引入更大的问题。优化通常会破坏依赖于未定义行为的代码,因为编译器可能以不同的方式合法地运行。你应该修改你的代码。
使用旧库可能是一个更好的快速修复方法是应用选择性优化:专门针对提供问题的模块禁用优化。这也有助于隔离问题,如果没有优化设置,可以在调试器中更轻松地调试该模块。
另外,简单地引用不同的头文件可能是不够的;您还需要链接VC2005库;否则库和标题可能不匹配。简而言之,不要使用比原始问题更复杂且更容易出错的“解决方案”!