TCCState
*tcc_new(void)
创建新的TCC编译上下文。
void
tcc_delete(TCCState
*s)
释放TCC编译上下文。
void
tcc_enable_debug(TCCState
*s)
在生成代码中添加调试信息。
void
tcc_set_error_func(TCCState
*s,
void
*error_opaque,
void
(*error_func)(void
*opaque,
const
char
*msg))
设置发生错误/警告时的回调函数。
int
tcc_set_warning(TCCState
*s,
const
char
*warning_name,
int
value)
设置和重设警告。
下面是预处理函数。
int
tcc_add_include_path(TCCState
*s,
const
char
*pathname)
添加头文件搜索路径。
int
tcc_add_sysinclude_path(TCCState
*s,
const
char
*pathname)
添加系统头文件搜索路径。
void
tcc_define_symbol(TCCState
*s,
const
char
*sym,
const
char
*value)
定义预处理器符号 "sym" ,可以添加可选的值。
void
tcc_undefine_symbol(TCCState
*s,
const
char
*sym)
取消预处理器符号 "sym" 的定义。
如下是编译函数。
int
tcc_add_file(TCCState
*s,
const
char
*filename)
添加一个文件,可以是C文件、dll、对象、库或者ld脚本。错误返回-1。
int
tcc_compile_string(TCCState
*s,
const
char
*buf)
编译作为C源码的字符串,错误返回非0。
链接命令。
输出类型,必须在所有编译之前定义:
-
TCC_OUTPUT_MENORY
:输出到内存,缺省值
-
TCC_OUTPUT_EXE
:输出到可执行文件
-
TCC_OUTPUT_DLL
:输出动态库
-
TCC_OUTPUT_OBJ
:输出目标文件
-
TCC_OUTPUT_PREPROCESS
:输出预处理文件(内部使用)
int
tcc_set_output_type(TCCState
*s,
int
output_type)
设置输出类型。
可执行文件格式:
-
TCC_OUTPUT_FORMAT_ELF
:输出格式ELF,缺省值
-
TCC_OUTPUT_FORMAT_BINARY
:二进制镜像
-
TCC_OUTPUT_FORMAT_COFF
:COFF
int
tcc_add_library_path(TCCState
*s,
const
char
*pathname)
等效于 "-Lpath" 选项。
int
tcc_add_library(TCCState
*s,
const
char
*libraryname)
等同于用 "-lxxx" 选项添加链接库。
int
tcc_add_symbol(TCCState
*s,
const
char
*name,
void
*val)
添加符号到编译过的程序。
int
tcc_output_file(TCCState
*s,
const
char
*filename)
输出可执行文件、库或目标文件,在此之前别调用 tcc_relocate()
。
int
tcc_run(TCCState
*s,
int
argc,
char
**argv)
链接和运行 main()
函数,并返回值。在此之前别调用 tcc_relocate()
。
int
tcc_relocate(TCCState
*s1,
void
*ptr)
拷贝代码到内存传递给调用者,并做重定位(必须在 tcc_get_symbol()
之前调用)。如果出错返回-1且在ptr是NULL时需要大小。
void
*tcc_get_symbol(TCCState
*s,
const
char
*name)
返回符号的值或找不到时返回NULL。
void
tcc_set_lib_path(TCCState
*s,
const
char
*path)
设置运行时的CONFIG_TCCDIR。
见 tests/libtcc_test.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "libtcc.h"
/*这个函数将会被生成的代码所调用*/
int add(int a, int b) {
return a+b;
}
char my_program[] =
"int fib(int n) {\n"
" if (n<=2)\n"
" return 1;n"
" else\n"
" return fib(n-1)+fib(n-2);\n"
"}\n"
"int foo(int n) {\n"
" printf(\"Hello World!\\n);\n"
" return 0;\n"
"}\n";
int main(int argc, char **argv) {
TCCState *s;
int (*func)(int);
void *mem;
int size;
s=tcc_new();
if (!s) {
fprintf(stderr, "Could not create tcc state\n");
exit(1);
}
/*如果tcclib.h和libtcc1.a尚未安装,寻找他们*/
if (argc==2 && !memcmp(argv[1],"lib_path=",9))
tcc_set_lib_path(s,argv[1]+9);
/*必须在任何编译之前设置输出类型*/
tcc_set_output_type(s,TCC_OUTPUT_MEMORY);
if (tcc_compile_string(s,my_program) == -1)
return 1;
/*添加add()函数允许动态生成代码调用,还可以用 tcc_add_dll() 来用。*/
tcc_add_symbol(s,"add",add);
/*获取代码大小*/
size=tcc_relocate(s,NULL);
if (size== -1)
return 1;
/*重定位内存并拷贝代码*/
mem=malloc(size);
tcc_relocate(s,mem);
/*获取入口符号*/
func=tcc_get_symbol(s,"foo");
if (!func)
return 1;
/*删除状态*/
tcc_delete(s);
/*运行代码*/
func(32);
free(mem);
return 0;
}
相关推荐
TCC(Tiny C Compiler)0.9.26源码 原版和VS工程版 VS版: 已经实现VS2008和VS2013 打开即用 可编译 可调试 建议使用VS2008编译
Tiny CC参考手册,格式为PDF,内容丰富,说明很完善还有丰富的例子。
Tiny C Compiler(TCC) 是一个轻量级高速的C语言编译器。 TCC的编译速度十分快,以至于编译一些大型项目都不需要Makefile文件。 TCC支持ANSI C,大部分的 ISO99 C的新标准和许多GNU C扩展以及C语言和汇编语言混编。...
TCC(Tiny C Compiler)0.9.26源码 VS版工程 已经实现VS2008和VS2013 打开即用 可编译 可调试 建议使用VS2008编译
TCC compiler sources
Tiny C Compiler编译器下载,体积非常小,编译/链接速度非常快,由Fabrice Bellard制作
TCC(Tiny C Compiler)0.9.26源码和VS工程版(VS2008和VS2013)可编译、可调试。
Tiny C Compiler 世界上最小的C编译器。支持C99标准。小而快!可能还有更小的,但有实用意义的就是它。用2012.10.11源码编译的版本。官方不停的更新源代码,但编译好的最新版本是2009年的。 你希望学习C语言,可以...
Tiny-Compiler C语言实现的一个Tiny编译器,生成linux汇编,面向nasm汇编器
ANSI C 兼容编译器。90%兼容GCC编辑器,可内联x86汇编, 适合于研究数据结构与算法和编译器的人员使用。真是小而功能齐全。 官方网站有最新版下载: http://bellard.org/tcc/ 在windows/linux下编译自己都是轻而易举! ...
开源项目-hazbo-the-super-tiny-compiler.zip,The Super Tiny Compiler, in Go
tinyos开发语言参考手册,详细介绍语言特性以及程序开发特点
Tiny C Compiler 是一个微型的 C 语言编译器,支持 Windows 和 Linux 平台。
TCC(Tiny C Compiler)0.9.26源码 VS版工程 已经实现VS2008和VS2013 打开即用 可编译 可调试 建议使用VS2008编译 没分的同学可以去下载无分版: http://download.csdn.net/detail/shen_juntao/8414171
tiny 6410 开发手册 tiny 6410 开发手册 tiny 6410 开发手册 tiny 6410 开发手册 tiny 6410 开发手册
Tiny6410 Ubuntu用户手册 01- Tiny6410硬件手册.pdf https://download.csdn.net/download/elliotcs/10374084 02- Tiny6410功能测试指南.pdf https://download.csdn.net/download/elliotcs/10374097 03- Tiny6410刷机...
编译原理实验,c语言实现TINY语言编译器,包括词法分析,语法分析,语义分析和中间代码生成。
tiny 6410 硬件手册 tiny 6410 硬件手册
linux下,一些tiny6410的使用手册测试