Introduction
前々回は、GLibc内の関数をP/Invokeで呼び出してみました。
また、CMakeでビルドしたC++のライブラリで関数を公開してみました。
これを利用して、.NET CoreでビルドしたC#のアプリケーションから、自作のC++ライブラリの関数を呼びだしてみます。
Preparation
C#とC++の簡単なプロジェクトを用意します。
今回のサンプルは 
になります。
サンプルは下記の構成になります。
- C++ 2つのint型の引数の和を返すAdd関数を備えたSharedライブラリ
 - C# コマンドラインの2つの引数を整数に変換し、その引数をAdd関数に渡した結果を標準出力に表示する実行アプリ
 
C#
Program.cs
1  | using System;  | 
C++
libCppLib.cpp
1  | 
  | 
CMakeLists.txt
1  | cmake_minimum_required(VERSION 3.0.0)  | 
Try
C++側は、Visual Studio Codeで、CMakeを使ってビルドします。
ビルド完了後、buildフォルダ配下に libCppLib.so が生成されます。
このファイルをシステムの共有フォルダに移動します。
FHS (Filesystem Hierarchy Standard) のルールに従って適切なフォルダにSharedライブラリをコピーします。
今回は、**/usr/local/lib64**にコピーします。
1  | file cp CppLib/build/libCppLib.so  | 
きちんと、Sharedライブラリがx64形式になっていることと、Add関数が公開されていることを確認し、フォルダにコピーしています。
C#側もビルドしますが、ビルド完了後、環境変数LD_LIBRARY_PATHに /usr/local/lib64 を追加します。
そうしないと、C#のアプリがライブラリを見つけることができません。
1  | cd CsharpApp  | 
期待通りの結果になりました。
環境変数LD_LIBRARY_PATHへの追加は一時的なものですので、別のシェルを立ち上げたりすると、そのシェルでは認識しないので、再度追加するか永続的に認識するよう別途対応しましょう。
Conclusion
自作ライブラリを使えるようになりました。
これによりLinuxでやれることが広がりました。
Source Code
https://github.com/takuya-takeuchi/Demo/tree/master/DotNetCoreLinux/DotNetCoreLinux6
