https://bellard.org/tcc/
这是代码获取途径
编译直接用 win32目录下的 build-tcc
编译工具进行编译即可,我这里是采用 vs build tools进行的编译
编译命令为 build-tcc.bat -c cl
libtcc.dll
,程序发布时得确认libtcc.dll
同时发布C
语言得通用库中函数,在程序发布时得附带 lib
和include
目录.D代码分为两个部分
libtcc.d
部分为libtcc.h
中的函数定义dtinycc.d
部分为 libtcc API
的简单封装main
主函数以下为简单测试代码
enum helloC2 = `
//#include <tcclib.h>
typedef struct MyStruct
{
unsigned char a1;
unsigned char a2;
unsigned char a3;
}__attribute__ ((aligned (2))) MyStruct;
__attribute__((dllimport))
extern char hello[];
int fib(int n)
{
printf("%s \n", hello);
printf("%d \n", sizeof(MyStruct));
if (n <= 1)
return 1;
else
return fib(n-1) + fib(n-2);
}
`;
import std.experimental.logger;
void main()
{
import tcc.dtinycc;
string hel = "hello123";
extern(C) int function(int ) fib1;
auto mtcc = new cTinyCC();
mtcc.pfInitScript();
mtcc.pfCompileString(helloC2);
mtcc.pfAddSymbol("hello",hel.ptr);
mtcc.pfRelocate();
fib1 = mtcc.pfGetSymbol!(typeof(fib1))("fib");
fib1(1);
info("fib1:", fib1(1));
}
extern(C)
void disErr(void* opaque, in char* msg)
{
import core.stdc.stdio:ssprintf = printf;
ssprintf("error:%s \n", msg);
//error(msg);
}
可以参考函数定义说明,如有不对部分请及时提出
https://gitee.com/sdvcn/d-tinyc