.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
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