.Net Core生成静态库

前言

在.Net Core 3.0发布之前,只能通过P/Invoke单向调用C/C++动态库(这里不包含C++ CLI).但现在可以通过生成静态库/动态库的方式,让C/C++直接(静态库)或间接调用.
大体流程 IL->CPP生成静态或动态库.原理和Unity3D的IL2CPP一样.

1. 下载和安装

.Net Core 3.0 下载地址:https://dotnet.microsoft.com/download/dotnet-core/3.0
先将安装包下载.这里安装Linux 64位为例:
执行命令,将压缩解压
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.0.100-preview-009812-linux-x64.tar.gz -C $HOME/dotnet
#设置环境变量
export DOTNET_ROOT=$HOME/dotnet 
export PATH=$PATH:$HOME/dotnet

.net core 3.0预览版

3. 创建库

这里主要参考 https://github.com/dotnet/corert/tree/master/samples/NativeLibrary

创建项目nuget.config
dotnet new nuget

在nuget.config内容改为:

<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />

添加项目引用:

dotnet add package Microsoft.DotNet.ILCompiler -v 1.0.0-alpha-* 
dotnet add package runtime.win-x64.Microsoft.DotNet.ILCompiler -v 1.0.0-alpha-*

再引用上面这两个,是比较耗时的.

生成静态库和动态库

#生成静态库
dotnet publish /p:NativeLib=Static  -r linux-x64 -c release
#生成动态库
dotnet publish /p:NativeLib=Shared -r linux-x64 -c release


c文件调用静态库的时候,一直编译不通过.再加上最近太忙了,加班到十二点.还不干完的活.没有继续下去.

秋风 2018-12-13