.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下生成静态库

.net core在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