.Net Core生成静态库,C程序调用
前言
在前边只是生成静态库,并没有调用成功.今天宇大在共享.Net Core 生成Native 静态库的demo,才发现为什么前面demo没有编译成功!是因为还需要其他的静态库.在前面建立.Net core ClassLib 添加项目runtime.win-x64.Microsoft.DotNet.ILCompiler 引用.其实是把.Net Core Native所需的文件下载到本地,当然包含一个编译器.
下图中,lib列表就是所依赖的静态库

.Net Core生成静态库的方式,在.Net Core生成静态库 只是前面实在Linux生成a文件.
在Windows系统用
dotnet publish /p:NativeLib=Static -r win-x64 -c release
看Windows下生成静态库
将所需要的依赖库拷贝,生成静态库所在的目录中,如下图。
csnative.c和csnative.h c语言头文件和c源文件. csnative.lib是c#生成静态库文件.头文件是根据c#导出函数编写
c语言调用
#pragma once
int add(int a, int b);
int sub(int a, int b);
#include <stdio.h>
#include "csnavtive.h"
int main(int arg, char *argv[])
{
int a = 100;
int b = 50;
int c = 30;
printf("add result:%d\n", add(a, b));
printf("sub result:%d\n", sub(a, b));
return 0;
}
批处理打包生成(宇内流云提供)
@ECHO OFF
REM 设置64位VC编译环境
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
SET OUT_FE=csnative.exe
SET LIBS=bootstrapperdll.lib System.Private.Jit.Native.lib System.Private.TypeLoader.Native.lib Runtime.ServerGC.lib kernel32.lib user32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib bcrypt.lib normaliz.lib
REM 编译
cl csnative.c csnative.lib %LIBS% /O2 /Fe:%OUT_FE%
REM 暂停,方便查看编译信息
PAUSE
结尾
简单类型数据,可以直接和c/c++无缝调用,复杂类型还没有进行测试调用.
秋风
2019-01-06