[英]Why OR-Tools doesn't load in C#/Linux?
我在 C# 中有一个简单的程序,它在 Ubuntu 21.04 上使用 OR-Tools 9.2.9972,但即使将共享库复制到bin
文件夹中,它也会返回无法加载库。 我尝试了命令dotnet add package
但错误仍然存在。
无法加载共享库“google-ortools-native”或其依赖项之一。
知道如何将这些共享库添加到项目中吗?
using System;
using Google.OrTools.LinearSolver;
public class SimpleLpProgram
{
static void Main()
{
Console.WriteLine("Starting");
Solver solver = Solver.CreateSolver("GLOP"); // linking error
Variable x = solver.MakeNumVar(0.0, double.PositiveInfinity, "x");
}
}
项目文件
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<LangVersion>8.0</LangVersion>
<TargetFrameworks>net6.0</TargetFrameworks>
<EnableDefaultItems>false</EnableDefaultItems>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<!-- see https://github.com/dotnet/docs/issues/12237 -->
<RollForward>LatestMajor</RollForward>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<AssemblyName>Google.OrTools.SimpleLpProgram</AssemblyName>
<Version>9.2.9972</Version>
<!-- Nuget Properties -->
<Description>Simple App consuming Google.OrTools package</Description>
<!-- Pack Option -->
<IsPackable>true</IsPackable>
<Title>Google.OrTools.SimpleLpProgram v9.2.9972</Title>
<PackageId>Google.OrTools.SimpleLpProgram</PackageId>
<PackageTags>sample</PackageTags>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<!-- Signing -->
<SignAssembly>false</SignAssembly>
<PublicSign>false</PublicSign>
<DelaySign>false</DelaySign>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<GenerateTailCalls>true</GenerateTailCalls>
</PropertyGroup>
<!-- Dependencies -->
<PropertyGroup>
<RestoreSources>../../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json</RestoreSources>
</PropertyGroup>
<ItemGroup>
<Compile Include="SimpleLpProgram.cs" />
<PackageReference Include="Google.OrTools" Version="9.2.9972" />
<PackageReference Include="Google.OrTools.runtime.linux-x64" Version="9.2.9972" />
</ItemGroup>
</Project>
哇。 原因是 glibc 不匹配...我将 Glib 2.34 附带的 Ubuntu 更新为 21.10,并且它有效。
前:
$ ldd google-ortools-native.so
./google-ortools-native.so: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/daniel/.nuget/packages/…/libortools.so)
linux-vdso.so.1 (0x00007fffd39b6000)
libortools.so => /home/daniel/.nuget/packages/…/libortools.so (0x00007fabb3407000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fabb31dc000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fabb308e000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fabb3073000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fabb2e85000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fabb2e69000)
/lib64/ld-linux-x86-64.so.2 (0x00007fabb530a000)
$ ldd --version
ldd (Ubuntu GLIBC 2.33-0ubuntu5) 2.33
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.