diff --git a/src/Simulation/Common/Simulators.Dev.props b/src/Simulation/Common/Simulators.Dev.props
index 9abcca669a7..bf304660f95 100644
--- a/src/Simulation/Common/Simulators.Dev.props
+++ b/src/Simulation/Common/Simulators.Dev.props
@@ -16,6 +16,9 @@
$(QsimDllMac)$(QsimDllLinux)$(QsimDllWindows)
+ $([MSBuild]::NormalizePath($(NativeBuildPath)/../../osx))
+ $([MSBuild]::NormalizePath($(NativeBuildPath)/../../linux))
+ $([MSBuild]::NormalizePath($(NativeBuildPath)/../../win10))
@@ -29,6 +32,11 @@
PreserveNewestfalse
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ false
+
diff --git a/src/Simulation/Native/linux/libomp.so.5 b/src/Simulation/Native/linux/libomp.so
similarity index 100%
rename from src/Simulation/Native/linux/libomp.so.5
rename to src/Simulation/Native/linux/libomp.so
diff --git a/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs b/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs
index dd77a4299d0..3562c661487 100644
--- a/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs
+++ b/src/Simulation/Simulators/QuantumSimulator/NativeImports.cs
@@ -14,6 +14,9 @@ public partial class QuantumSimulator
// Preparation\Arbitrary.cs(23,41): error CS0117: 'QuantumSimulator' does not contain a definition for
// 'QSIM_DLL_NAME' [D:\a\1\s\submodules\QuantumLibraries\Standard\src\Standard.csproj]
+ [DllImport("libomp", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "omp_get_num_threads")]
+ private static extern int OmpGetNumberOfThreadsNative();
+
private delegate void IdsCallback(uint id);
[DllImport(QSIM_DLL_NAME, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "DumpIds")]
private static extern void sim_QubitsIdsNative(uint id, IdsCallback callback);
diff --git a/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs b/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs
index 58bceb2903f..c012d569b40 100644
--- a/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs
+++ b/src/Simulation/Simulators/QuantumSimulator/QuantumSimulator.cs
@@ -28,6 +28,14 @@ public QuantumSimulator(
randomNumberGeneratorSeed,
disableBorrowing)
{
+ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ // We don't need this value, but explicitly calling an OMP function should trigger the load of libomp
+ // by .NET from the runtimes folder for the current platform, such that the later library load by the
+ // simulator does not need to know where to search for it.
+ var threadCount = OmpGetNumberOfThreadsNative();
+ }
+
Id = InitNative();
// Make sure that the same seed used by the built-in System.Random
// instance is also used by the native simulator itself.