問題:
我最近開始在 Win10 上開發(C )。我有一個構建完美的 CMake 專案(除錯和發布構建),但是如果我嘗試運行它以進行除錯,我會VCRUNTIME140_1D.dll丟失錯誤。
問題在于缺少 VC 運行時 140.1 的除錯版本(因此D是錯誤訊息中的前綴)。
我以兩種方式啟動二進制檔案:
- PowerShell - 它靜默崩潰(這是 PowerShell 中非常典型的不合作行為,我仍然需要時間來習慣)
- VS2017 中的除錯模式 - 用于實際除錯。這是實際錯誤(以訊息框的形式)出現在我的螢屏上的地方。
設定:
使用Visual Studio 2017,Win10。在開發階段需要除錯,但稍后將創建發布版本并將其交付給客戶。
使用 CMake 3.12(隨 VS2017 提供)。CMakeLists.txt最后可以看到完整的。
我鏈接的庫是
libtorch 1.12.1- 具有依賴項的最新版本的 libtorch C 二進制檔案(直接來自 PyTorch 的官方網站)。目前無法識別編譯器。opencv 4.6.0- 最新版本的 OpenCV 二進制檔案(直接來自 OpenCV 官方網站)。提供兩個版本 - VC14 和 VC15。使用 VC15,假設它指的是 Visual Studio 2015 附帶的 VC ,即 MSVC 工具包的v140 / v140.1。
這兩個依賴項在除錯和發布版本中都可用。但是,我想(如果可能)鏈接到第 3 方庫的發布版本,并專注于除錯我自己的代碼(libtorch 的除錯版本的大小是瘋狂的——對于 CPU 和 CUDA,你會得到高達 12GB 的容量!)。
想法:
我看著我的C:\,我能找到的只有
vcruntime140d.dllvcruntime140.dllvcruntime140_1.dll
我還讀到/MDvs/MDd作為標志起著重要作用。
我在網上遇到了一些帖子,提到我需要安裝 Visual Studio 2019。
問題:
以下兩個問題在這里很重要:
我需要安裝哪些組件(VS2019 或其他)才能獲得這個 DLL,并且它是否足以在除錯模式下運行?
我可以在 VS2017 專業版專案中使用(僅用于除錯)VS2019 社區版附帶的 VC 運行時嗎?目前我只能訪問 VS2017 的 Pro 版本。
我在 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/"
)
uj5u.com熱心網友回復:
“使用 VC15,假設它指的是 Visual Studio 2015 附帶的 VC ”。
不,那是錯誤的。Visual Studio 2015 附帶 Visual C 版本 14。Visual C 15 附帶 VS2017、VC16 附帶 VS2019 和 VC17 附帶 VS2022。
這里的混淆是在 VC 順序版本號和 Visual Studio 年份之間。當 C 在 1998 年標準化時,Visual C 已經達到了第 6 版。但每個日歷年發布的版本少于一個 - 24 年內發布了 11 個版本。
uj5u.com熱心網友回復:
當前一代的Microsoft Visual C/C 運行時對 VS 2015 Update 3、VS 2017、VS 2019 和 VS 2022具有二進制兼容性。這意味著較新版本的 DLL 可以與使用舊版本構建的庫和可執行檔案一起使用工具系列。
對于零售分發(即僅發布版本),您有一些選項,如Microsoft Docs所述。您可以從此處獲取最新的 REDIST 包:X64、X86和ARM64。
CRT 二進制檔案的 DEBUG 版本僅適用于 Visual Studio,但您可以使用 VS 2019 或 VS 2022 Build Tools Edition來獲取它們。
能否使用 VS 社區版取決于你的情況。功能集與 VS Professional 相同,但需要滿足許可協議的要求。
uj5u.com熱心網友回復:
安裝 VS2019 解決了這個問題。我仍在使用 VS2017,但現在vcruntime140_1d.dll與其余部分一起找到了。最終產品當然不會附帶任何除錯版本依賴項,只會向客戶提供發布版本。
在將社區版附帶的除錯庫與商業應用程式的專業版專案結合起來時,我將提出一個關于許可問題的新問題。
我不確定為什么 Microsoft 決定為 2015 年推出的東西制作運行時的除錯版本,而 2019 年版中可用,但 2017 年版中沒有。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/517226.html
