Hello. I’m building a low latency, real-time application using a PyTorch model, and I’ve been trying to get a “hello world” kind of example compiling in C++, using either VS2017 or VS2019. So far, I’ve managed to git things to compile, following the tutorial here 2,  but I’m getting a cryptic error at runtime.
The actual message is: "The ordinal 242 could not be located in the dynamic link library c:\dev\libtorch\lib\torch.dll"
Edit: After a lot of work, I have at least been able to verify this only occurs with version 1.4.0 of pytorch, versions 1.3.0 and 1.0.0 both worked fine (I had to guess the url to get download previous releases). I’m currently trying to build pytorch 1.4.0 from source by this is a complex undertaking for someone new to the project.
This happens as soon as I run the compiled executable, regardless of whether I include any code my my main function or not, but as long as my cpp file contains #include <torch/torch.h> this occurs.
If you can help at all, or theorise as to what is going wrong here, I would be very grateful.
Best regards - Valdemar.

More info:

I’ve tried this using both the debug and release versions of libtorch, making sure to have the matching build target when running cmake.
I’ve tried running this with and without the CUDA dlls on my path (various subdirectories from C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1… )


Edit: I’ve just realized this doesn’t work without the relevant paths to the Cuda libraries, as I get an error:
– Added CUDA NVCC flags for: -gencode;arch=compute_75,code=sm_75
CMake Error at C:/dev/libtorch/share/cmake/Caffe2/Caffe2Config.cmake:96 (message):
Your installed Caffe2 version uses cuDNN but I cannot find the cuDNN
libraries.  Please set the proper cuDNN prefixes and / or install cuDNN.
Call Stack (most recent call first):
C:/dev/libtorch/share/cmake/Torch/TorchConfig.cmake:40 (find_package)
CMakeLists.txt:4 (find_package)
I’m wondering if I’m mixing up versions of cdnn, and that might be the issue??


I initially had CuDNN 7.6.4.38 installed (latest CuDNN for Cuda 10.1), but have also tried removing that and using 7.6.2.24 instead, which matches the exact dll version of the one in libtorch, but not the size (libtorchj has a 383,443kb file, I have a 417,388kb file)
I’ve tried this with different cmake toolsets, I’ve got both VS2017 and VS2019 installed, and have tried both using, for example cmake -G “Visual Studio 15 2017 Win64” -DCMAKE_PREFIX_PATH=C:\dev\libtorch\
I’ve tried both debug and release version of libtorch.

My environment path contains this at the start:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\libnvvp;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\lib64;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib;
C:\dev\libtorch\lib;

I have libtorch located at c:\dev\libtorch
My CMakeLists.txt
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(dcgan)

find_package(Torch REQUIRED)

add_executable(dcgan dcgan.cpp)
target_link_libraries(dcgan "${TORCH_LIBRARIES}")
set_property(TARGET dcgan PROPERTY CXX_STANDARD 14)

dcgan.cpp
#include <torch/torch.h>
#include <iostream>

int main() {
	//torch::Tensor tensor = torch::eye(3);
	//std::cout << tensor << std::endl;
	std::cout << "hello" << std::endl;
}

My cmake output:
C:\dev\libtorch\test\dcgan>cmake -DCMAKE_PREFIX_PATH=C:\dev\libtorch\
CMake Warning:
  No source or binary directory provided.  Both will be assumed to be the
  same as the current working directory, but note that this warning will
  become a fatal error in future CMake releases.
  
-- Building for: Visual Studio 16 2019
-- The C compiler identification is MSVC 19.23.28107.0
-- The CXX compiler identification is MSVC 19.23.28107.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE
-- Found CUDA: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1 (found version "10.1")
-- Caffe2: CUDA detected: 10.1
-- Caffe2: CUDA nvcc is: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc.exe
-- Caffe2: CUDA toolkit directory: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1
-- Caffe2: Header version is: 10.1
-- Found CUDNN: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/lib/x64/cudnn.lib
-- Found cuDNN: v7.6.5  (include: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/include, library: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/lib/x64/cudnn.lib)
-- Autodetected CUDA architecture(s):  7.5
-- Added CUDA NVCC flags for: -gencode;arch=compute_75,code=sm_75
CMake Warning (dev) at C:/dev/libtorch/share/cmake/Caffe2/public/utils.cmake:81 (if):
  Policy CMP0054 is not set: Only interpret if() arguments as variables or
  keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.

  Quoted variables like "MSVC" will no longer be dereferenced when the policy
  is set to NEW.  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  C:/dev/libtorch/share/cmake/Caffe2/Caffe2Config.cmake:121 (caffe2_interface_library)
  C:/dev/libtorch/share/cmake/Torch/TorchConfig.cmake:40 (find_package)
  CMakeLists.txt:4 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at C:/dev/libtorch/share/cmake/Torch/TorchConfig.cmake:108 (if):
  Policy CMP0054 is not set: Only interpret if() arguments as variables or
  keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.

  Quoted variables like "MSVC" will no longer be dereferenced when the policy
  is set to NEW.  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  CMakeLists.txt:4 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Found torch: C:/dev/libtorch/lib/torch.lib
-- Configuring done
-- Generating done
-- Build files have been written to: C:/dev/libtorch/test/dcgan

C:\dev\libtorch\test\dcgan>cmake --build . --config Release
Microsoft (R) Build Engine version 16.3.2+e481bbf88 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

  Checking Build System
  Building Custom Rule C:/dev/libtorch/test/dcgan/CMakeLists.txt
  dcgan.cpp
C:\dev\libtorch\include\torch/csrc/jit/tracer.h(289,72): warning C4273: 'torch::jit::tracer::addInputs': inconsistent dll linkage [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\torch/csrc/jit/tracer.h(277,16): message : see previous definition of 'addInputs' [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\torch/csrc/jit/tracer.h(296,44): warning C4273: 'torch::jit::tracer::addInputs': inconsistent dll linkage [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\torch/csrc/jit/tracer.h(283,16): message : see previous definition of 'addInputs' [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/util/Half.h(451,45): warning C4018: '>': signed/unsigned mismatch [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/util/Half.h(497): message : see reference to function template instantiation 'bool c10::overflows<To,From>(From)' being compiled [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/util/Half.h(497): message :         with [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/util/Half.h(497): message :         [ [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/util/Half.h(497): message :             To=int64_t, [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/util/Half.h(497): message :             From=int64_t [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/util/Half.h(497): message :         ] [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/core/Scalar.h(72): message : see reference to function template instantiation 'To c10::checked_convert<int64_t,int64_t>(From,const char *)' being compiled [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/core/Scalar.h(72): message :         with [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/core/Scalar.h(72): message :         [ [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/core/Scalar.h(72): message :             To=int64_t, [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/core/Scalar.h(72): message :             From=int64_t [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
C:\dev\libtorch\include\c10/core/Scalar.h(72): message :         ] [C:\dev\libtorch\test\dcgan\dcgan.vcxproj]
     Creating library C:/dev/libtorch/test/dcgan/Release/dcgan.lib and object C:/dev/libtorch/test/dcgan/Release/dcgan.exp
  dcgan.vcxproj -> C:\dev\libtorch\test\dcgan\Release\dcgan.exe
  Building Custom Rule C:/dev/libtorch/test/dcgan/CMakeLists.txt

C:\dev\libtorch\test\dcgan>