2017/07/16

.NET CoreでFailed to loadしたら

.NET Coreを試してみようと思ってWindows10でUbuntu14.04用の実行ファイルを作成した。
そのときに Failed to load のエラーが出たので備忘メモ。




目次

  • Windows10 64bit
  • Microsoft Visual Studio Community 2017 インストール済み

Ubuntu 14.04 64bit(Cloud9の環境で実行)

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
$ arch
x86_64

まずはWindows10のほうで作業する。

下記の作業でConsoleアプリケーションを作成した。

C:\>mkdir hello
C:\>cd hello
C:\hello>dotnet new console
C:\hello>dir /B
hello.csproj
Program.cs

Program.csの内容は以下の通り。

using System;
 
namespace hello
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Ubuntu14.04の実行ファイルを作成するためにhello.csprojを編集する。

具体的には以下の5行目のように<RuntimeIdentifiers>ubuntu.14.04-x64</RuntimeIdentifiers>を追記する。

ちなみに他のOSのRuntime IDentifier(RID)は.NET Core Runtime IDentifier (RID) catalogを見ると分かる。

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeIdentifiers>ubuntu.14.04-x64</RuntimeIdentifiers>
</PropertyGroup>
</Project>

hello.csprojの編集が終わったらビルドする。

C:\hello>dotnet publish -c Release -r ubuntu.14.04-x64

さぁ、出来上がった!WindowsでビルドしたやつをLinuxで動かしたろ!

C:\hello\bin\Release\netcoreapp1.1\ubuntu.14.04-x64\publishのフォルダごとCloud9にアップロードする。(実行ファイル以外にいっぱいファイルがあるので結構サイズが大きい)

今度はUbuntu(Cloud9)のほうで作業。

パーミッションを付与して実行する。

$ cd publish
$ chmod +x hello
$ ./hello
Failed to load /home/ubuntu/workspace/publish/libcoreclr.so, error: libunwind.so.8: cannot open shared object file: No such file or directory
Failed to bind to CoreCLR at '/home/ubuntu/workspace/publish/libcoreclr.so'

動かねーじゃねーか!

Google先生が教えてくれた。というかGithubに書いてあった。

ということで、徐ろにコマンドを実行する。

$ sudo apt-get install libunwind8
$ ./hello
Hello World!

動いたじゃねーか!

便利な世の中になってきた。


[広告]

Amazon

ASP.NET MVC 5 実践プログラミング

スポンサーリンク

スポンサーリンク

スポンサーリンク

コメント

非公開コメント