gpt4 book ai didi

c++ - 在 Visual Studio 2015 中,如何确保跨机器的 C++ 生成环境一致?

转载 作者:行者123 更新时间:2023-12-01 13:48:05 25 4
gpt4 key购买 nike

我在 Visual Studio 2015 中有一些 C++ 代码,可以在我的机器上编译并正常工作,但在我的队友的机器上却没有。

我们有完全相同的代码库,以及所有相同库的完全相同版本,但在他的机器上,Visual Studio 无法正确解析模板的某些宏,而我的工作正常。

我正在尝试重新创建他的构建环境,以便我可以重现该问题。
我们都在使用 Visual Studio 15 update 3 Version 14.0.25431.01 ,但 Visual C++ 2015 版本不同,但我找不到指定我希望 Visual Studio 使用的版本的方法。

我该怎么做?一般来说,我如何确保我们的构建环境在 Visual Studio 中保持一致?

编辑:从对我们迄今为止所做工作的评论中获取更多信息:

  • 我们都使用完全相同的 Visual Studio 2015 版本(更新 3 版本 14.0.25431.01)
  • 确保我们的库相对于解决方案目录并与项目存储库一起下载,因此没有错误的路径
  • 在 repo 中包含项目文件和解决方案,并确保它们具有相同的
  • 目标平台版本(Windows SDK 版本):Windows 8.1
  • 平台工具集:Visual Studio 2015 (v140)


  • 编辑:正如@Marek R 提到的,我应该包括我遇到的确切错误:
    我正在尝试使用 Eigen 库进行一些信号处理。

    它崩溃的确切行尝试初始化数组,如下所示:
    Eigen::ArrayX<int> foo(size_of_the_array)然后使用该数组:
    foo(index) = bar
    Eigen 在模板 using 语句上使用宏将这种类型重新定义为: Eigen::Array<int,-1,1>
    这在我的机器上按预期工作,但是当尝试在他的机器上编译时,它失败了
    3>HighRes.cpp(187): error C2514: 'Eigen::Array<int,-1,1,,-1,1>': class has no constructors
    3> c:\WORKING_DIR\sigproc_vs2015\eigen\eigen\src/Core/Array.h(46): note: see declaration of 'Eigen::Array<int,-1,1,,-1,1>' 3>HighRes.cpp(188): error C2039: 'size': is not a member of 'Eigen::Array<int,-1,1,,-1,1>'

    3> c:\WORKING_DIR\sigproc_vs2015\eigen\eigen\src/Core/Array.h(46): note: see declaration of 'Eigen::Array<int,-1,1,,-1,1>' 3>HighRes.cpp(188): error C2039: '__this': is not a member of 'Eigen::Array<int,-1,1,,-1,1>'

    3> c:\WORKING_DIR\sigproc_vs2015\eigen\eigen\src/Core/Array.h(46): note: see declaration of 'Eigen::Array<int,-1,1,,-1,1>' 3>HighRes.cpp(189): error C2064: term does not evaluate to a function taking 1 arguments

    更奇怪的是代码的其他部分对这个宏有类似的调用,但使用其他类型,例如: Eigen::ArrayX<bool> baz(some_other_size);他的构建并没有提示这些。我正在尝试在我的身上重现这种行为。

    更新:我有机会多玩他的机器,我注意到一些事情:

    1:他的机器很好实例化 Eigen::ArrayX<T>其他任何地方,除了早期未能构建的代码的特定部分

    2:该特定部分的唯一特别之处在于它位于闭包内
    auto process_in_parallel = [state](int dimension){ 
    // Other code...
    Eigen::ArrayX<int> foo(size_of_the_array);


    3:Eigen 使用嵌套宏来定义模板 using 定义 ArrayX 类的语句。

    实际上,我在让 Visual Studio 15 使用语句和嵌套模板类使用模板时遇到了很多麻烦;编译器经常会崩溃,只是让我围绕给定的行简化我的代码。
    我很高兴通过将定义更改为 Eigen::ArrayXi 来解决这个问题。 ;非模板类型别名。这编译得很好,并且构建通过了所有测试。

    最佳答案

    the Visual C++ 2015 versions are different



    解决此问题的最简单方法是将 Visual Studio 更新到你们双方的最新版本。它还将更新所有已安装的组件,包括 C++ 工具集。

    另一件可能不同的事情是安装的 Windows SDK 组件和一组系统库。确保您使用相同版本的 Windows(使用 winver 命令)。错误消息将有助于诊断问题。

    关于c++ - 在 Visual Studio 2015 中,如何确保跨机器的 C++ 生成环境一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58377525/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com