.NET 核心 WSL 安装和 DllNotFoundException
.NET core WSL installation and DllNotFoundException
我正在 Windows 10 机器上尝试新的 Q# 语言。
我有三台 Windows 10 台机器,它们都有 WSL (Ubuntu)。
三人中有两人能够安装最新的 .NET Core SDK 和 运行 Q#
代码
因为它是在 Windows 上本地执行的。
但是,第三台机器无法 运行 (但可以完美编译)。
不知何故,SDK 的安装已损坏,我现在 C#
代码从 Microsoft.Quantum.*
.
调用方法时出现运行时异常
我尝试重新安装 Ubuntu WSL(干净),但问题仍然存在。
这与以下事实有关:WSL 在预览后和运送到 Win Store 之前就存在于这台机器上。
为了实验,我下载了 Debian(从商店),只安装了 .NET SDK,Q#
代码工作正常。
现在的问题是我如何 清除 遗留的 Ubunut WSL 并在该特定机器上进行全新安装?
这是 WSL 在 dotnet run
命令上生成的输出
Unhandled Exception: System.DllNotFoundException: Unable to load DLL
'Microsoft.Quantum.Simulator.Runtime.dll': The specified module or one of its dependencies could not be found.
(Exception from HRESULT: 0x8007007E)
at Microsoft.Quantum.Simulation.Simulators.QuantumSimulator.Init()
at Microsoft.Quantum.Simulation.Simulators.QuantumSimulator..ctor(Boolean
throwOnReleasingQubitsNotInZeroState, Nullable`1 randomNumberGeneratorSeed,
Boolean disableBorrowing)
at Bell.Driver.Test_Simple() in
/mnt/c/Users/.../Programming/Temp/QS/Bell/Driver.cs:line 26
at Bell.Driver.Main(String[] args) in
/mnt/c/Users/.../Programming/Temp/QS/Bell/Driver.cs:line 12
这是我调用Q#
相关代码的方法
private static void Test_Simple()
{
WriteLine($"\r\n{nameof(Test_Simple)}");
var header = $"{"Initial", -10}|{Result.Zero, -10}|{Result.One, -10}|";
WriteLine(new string('-', header.Length));
WriteLine(header);
WriteLine(new string('-', header.Length));
// --> Exception is thrown here <--
using (var simulator = new QuantumSimulator())
{
var nRuns = 10_000;
var initials = new [] { Result.Zero, Result.One };
foreach (var init in initials)
{
var (nZero, nOne) =
Quantum.BellTestSimple.Run(simulator, nRuns, init).Result;
WriteLine($"{init, -10}|{nZero, -10}|{nOne, -10}");
}
}
}
这个完全相同项目运行在相同机器和Debian子系统上都很好,但在Ubuntu 子系统。
可能是您缺少 Microsoft.Quantum.Simulator.Runtime.dll
库所依赖的本机库。例如,其他用户 ,他们缺少 libgomp1。要检查您是否拥有所需的所有依赖项,您可以使用 ldd
获取有关如何解析每个本机运行时依赖项的报告。例如:
$ ldd ~/.nuget/packages/microsoft.quantum.development.kit/0.2.1802.2202-preview/runtimes/linux-x64/native/Microsoft.Quantum.Simulator.Runtime.dll
linux-vdso.so.1 => (0x00007fffc4fab000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1d692d0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1d68fc0000)
libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f1d68d80000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1d689b0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1d69a00000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1d68790000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1d68570000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1d68350000)
此代码段向我们展示了 libgomp.so.1
已成功解析为 /usr/lib/x86_64-linux-gnu/libgomp.so.1
,而如果缺少该库,您将获得不同的列表:
$ ldd ~/.nuget/packages/microsoft.quantum.development.kit/0.2.1802.2202-preview/runtimes/linux-x64/native/Microsoft.Quantum.Simulator.Runtime.dll
linux-vdso.so.1 => (0x00007fffc5103000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f713cfd0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f713ccc0000)
libgomp.so.1 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f713c8e0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f713d600000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f713c6c0000)
我正在 Windows 10 机器上尝试新的 Q# 语言。
我有三台 Windows 10 台机器,它们都有 WSL (Ubuntu)。
三人中有两人能够安装最新的 .NET Core SDK 和 运行 Q#
代码
因为它是在 Windows 上本地执行的。
但是,第三台机器无法 运行 (但可以完美编译)。
不知何故,SDK 的安装已损坏,我现在 C#
代码从 Microsoft.Quantum.*
.
我尝试重新安装 Ubuntu WSL(干净),但问题仍然存在。
这与以下事实有关:WSL 在预览后和运送到 Win Store 之前就存在于这台机器上。
为了实验,我下载了 Debian(从商店),只安装了 .NET SDK,Q#
代码工作正常。
现在的问题是我如何 清除 遗留的 Ubunut WSL 并在该特定机器上进行全新安装?
这是 WSL 在 dotnet run
命令上生成的输出
Unhandled Exception: System.DllNotFoundException: Unable to load DLL
'Microsoft.Quantum.Simulator.Runtime.dll': The specified module or one of its dependencies could not be found.
(Exception from HRESULT: 0x8007007E)
at Microsoft.Quantum.Simulation.Simulators.QuantumSimulator.Init()
at Microsoft.Quantum.Simulation.Simulators.QuantumSimulator..ctor(Boolean
throwOnReleasingQubitsNotInZeroState, Nullable`1 randomNumberGeneratorSeed,
Boolean disableBorrowing)
at Bell.Driver.Test_Simple() in
/mnt/c/Users/.../Programming/Temp/QS/Bell/Driver.cs:line 26
at Bell.Driver.Main(String[] args) in
/mnt/c/Users/.../Programming/Temp/QS/Bell/Driver.cs:line 12
这是我调用Q#
相关代码的方法
private static void Test_Simple()
{
WriteLine($"\r\n{nameof(Test_Simple)}");
var header = $"{"Initial", -10}|{Result.Zero, -10}|{Result.One, -10}|";
WriteLine(new string('-', header.Length));
WriteLine(header);
WriteLine(new string('-', header.Length));
// --> Exception is thrown here <--
using (var simulator = new QuantumSimulator())
{
var nRuns = 10_000;
var initials = new [] { Result.Zero, Result.One };
foreach (var init in initials)
{
var (nZero, nOne) =
Quantum.BellTestSimple.Run(simulator, nRuns, init).Result;
WriteLine($"{init, -10}|{nZero, -10}|{nOne, -10}");
}
}
}
这个完全相同项目运行在相同机器和Debian子系统上都很好,但在Ubuntu 子系统。
可能是您缺少 Microsoft.Quantum.Simulator.Runtime.dll
库所依赖的本机库。例如,其他用户 ldd
获取有关如何解析每个本机运行时依赖项的报告。例如:
$ ldd ~/.nuget/packages/microsoft.quantum.development.kit/0.2.1802.2202-preview/runtimes/linux-x64/native/Microsoft.Quantum.Simulator.Runtime.dll
linux-vdso.so.1 => (0x00007fffc4fab000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1d692d0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1d68fc0000)
libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f1d68d80000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1d689b0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1d69a00000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1d68790000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1d68570000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1d68350000)
此代码段向我们展示了 libgomp.so.1
已成功解析为 /usr/lib/x86_64-linux-gnu/libgomp.so.1
,而如果缺少该库,您将获得不同的列表:
$ ldd ~/.nuget/packages/microsoft.quantum.development.kit/0.2.1802.2202-preview/runtimes/linux-x64/native/Microsoft.Quantum.Simulator.Runtime.dll
linux-vdso.so.1 => (0x00007fffc5103000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f713cfd0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f713ccc0000)
libgomp.so.1 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f713c8e0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f713d600000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f713c6c0000)