Visual Studio 2017 CMake项目中缺少VCRUNTIME140_1D.dll-我是否也需要Visual Studio 2019并在较旧版本的Studio中使用它?

q9rjltbz  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(118)

出版日期:

我最近开始在Win10上开发(C++)。我有一个CMake项目,它构建得非常好(调试和发布构建),但是如果我试图以调试的目的运行它,我会得到VCRUNTIME140_1D.dll缺失错误。
问题在于缺少VC++运行时140.1的调试版本(因此错误消息中出现了D前缀)。
我以两种方式启动二进制:

  • PowerShell -它会无声地崩溃(这是PowerShell中非常典型的不合作行为,我仍然需要时间来适应)
  • VS 2017中的调试模式-用于实际调试。这是实际错误(以消息框的形式)出现在我的屏幕上的地方。
    设定:

使用Visual Studio 2017,Win10。在开发阶段需要调试,但稍后将创建发布版本并交付给客户。
使用CMake 3.12(VS 2017附带)。在最后可以看到完整的CMakeLists.txt
我链接的库是

  • libtorch 1.12.1-最新版本的libtorch C++二进制文件,带有依赖项(直接从PyTorch的官方网站下载)。目前无法识别编译器。
  • opencv 4.6.0-OpenCV二进制文件的最新版本(直接从OpenCV官方网站获得)。提供两个版本-VC 14和VC 15。使用VC 15时,假设它是指Visual Studio 2015附带的VC++,即MSVC工具包的v140/v140.1

这两个依赖项在调试版本和发布版本中都有,但是我想(如果可能的话)链接到第三方库的发布版本,集中精力调试我自己的代码(libtorch的调试版本的大小太大了--对于CPU和CUDA,你都得到了惊人的12 GB!)。

创意:

我在我的C:\上看,我能找到的只有

  • vcruntime140d.dll
  • vcruntime140.dll
  • vcruntime140_1.dll

我还读到/MD/MDd作为标志发挥了重要作用。
我在网上遇到了几个帖子,提到我需要安装Visual Studio 2019。

问题:

这里有两个重要问题:

  • 我需要安装哪些组件(VS 2019或其他)才能获得此DLL,拥有它是否足以在调试模式下运行?
  • 我可以在VS 2017专业版项目中使用(仅用于调试)VS 2019社区版附带的VC++运行时吗?目前我只能访问VS 2017专业版。

我在CMake中的项目文件如下所示:

CMakeLists.txt文件

cmake_minimum_required (VERSION 3.12 FATAL_ERROR)

project(pytroch
  DESCRIPTION "CMake example for PyTorch (libtorch C++) integration"
  LANGUAGES CXX
)

set(CMAKE_CXX_STANDARD 14)

set(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")

set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/deps/libtorch/1.12.1/debug/cpu/share/cmake/Torch")

# set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/deps/libtorch/1.12.1/release/cpu/share/cmake/Torch")

find_package(Torch REQUIRED)
if(TORCH_FOUND)
    message(STATUS "Found Torch")
else()
    message(CRITICAL_ERROR "Unable to find Torch")
endif(TORCH_FOUND)

set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/deps/opencv/4.6.0/")
find_package(OpenCV 4.6.0 REQUIRED)

add_library(pytorch_cv_utils SHARED "${SRC_DIR}/pytorch_cv_utils.cpp")
target_include_directories(pytorch_cv_utils PUBLIC  ${INCLUDE_DIR} ${TORCH_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
target_link_libraries(pytorch_cv_utils PUBLIC ${TORCH_LIBRARIES} ${OpenCV_LIBS})

add_executable(pytroch_load_model
    "${SRC_DIR}/pytroch_load_model.cpp"
)
target_include_directories(pytorch_cv_utils PUBLIC  ${INCLUDE_DIR} ${TORCH_INCLUDE_DIRS})
target_link_libraries(pytroch_load_model PRIVATE pytorch_cv_utils)

# Copy Torch dependencies to binary folder

file(GLOB LIBTORCH_DLLS

# "${CMAKE_SOURCE_DIR}/deps/libtorch/1.12.1/release/cpu/lib/*.dll"

  "${CMAKE_SOURCE_DIR}/deps/libtorch/1.12.1/debug/cpu/lib/*.dll"
)
file(COPY
    ${LIBTORCH_DLLS}
    DESTINATION "${CMAKE_BINARY_DIR}/bin/"
)

# Copy OpenCV dependencies to binary folder

file(GLOB OPENCV_DLLS
  "${CMAKE_SOURCE_DIR}/deps/opencv/4.6.0/x64/vc15/bin/*.dll"
)
file(COPY
    ${OPENCV_DLLS}
    DESTINATION "${CMAKE_BINARY_DIR}/bin/"
)
j8yoct9x

j8yoct9x1#

**TL;DR:**移至VS 2019或VS 2022。

最新一代 Microsoft Visual C/C++ Runtime 针对VS 2015 Update 3、VS 2017、VS 2019和VS 2022提供了binary compatibility。这意味着 * 较新 * 版本的DLL可以与使用此工具系列 * 较旧 * 版本构建的库和可执行文件配合使用。
对于零售版(即发行版),您有几个选项,如Microsoft Docs所示。您可以从此处获得最新的REDIST软件包:X64X86ARM64中的一个或多个。
调试版本的CRT二进制文件仅在Visual Studio中提供,但您可以使用VS 2019或VS 2022 Build Tools Edition来获取它们。您不能随应用程序再分发调试版本的CRT。
vcruntime140_1.dll是在Visual Studio 2019 Update 2中添加的。它是为了支持新的x64 exception handler。请注意,如果您使用/d2FH4-构建,则此要求将被删除,但我怀疑问题是您使用的是为VS 2019构建的静态C++库(带有VS 2017工具集/链接器)。根据 * 二进制兼容性 * 规则,这是不受支持的场景。
VS 2017的所有版本截至2022年4月均为out of mainstream support
是否可以使用VS Community Edition取决于您的情况,功能集与VS Professional相同,但需要满足license agreement的要求。

46qrfjad

46qrfjad2#

安装VS2019解决了这个问题。我仍然在使用VS2017,但现在vcruntime140_1d.dll与其他版本一起被发现。最终产品当然不会附带任何调试版本依赖项,只会给客户一个发布版本。
我将打开一个new question regarding licensing issues,当结合调试库与社区版与专业版项目的商业应用程序。
我不知道为什么微软决定为2015年推出的运行时做一个调试版本,在2019年的版本中提供,而在2017年的版本中没有。

相关问题