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 C Compiler(简称TCC)是一款轻量级的C语言编译器,由法国程序员Fabrice Bellard开发。它的特点是体积小巧,但编译和链接的速度极快,使其成为快速原型开发、嵌入式系统以及对编译速度有较高要求的项目的理想...
Tiny CC参考手册,格式为PDF,内容丰富,说明很完善还有丰富的例子。
Tiny C Compiler(TCC) 是一个轻量级高速的C语言编译器。 TCC的编译速度十分快,以至于编译一些大型项目都不需要Makefile文件。 TCC支持ANSI C,大部分的 ISO99 C的新标准和许多GNU C扩展以及C语言和汇编语言混编。...
Tiny C Compiler(简称TCC)是一款小巧而快速的C语言编译器,版本0.9.26。这个源码包特别为Visual Studio环境优化,提供了VS2008和VS2013的支持,使得用户可以直接在这些版本的Visual Studio中打开、编译和调试TCC的...
TCC compiler sources
该项目是基于TCC-Tiny C Compiler的中文开源C语言编译器设计源码,包含1880个文件,涵盖1216个头文件、270个源文件、136个expect脚本文件、120个BMP图像文件、13个DEF配置文件、9个批处理文件、9个文本文件、8个源...
在这个项目中,我们将深入探讨一个名为“TINY-COMPILER”的小型编译器的实现,它使用C语言编写,旨在提供一个直观的编译器设计和实现的教学案例。 首先,我们来了解编译器的基本工作流程。编译器通常由以下几个核心...
Tiny-Compiler是一个基于C语言实现的简单编译器项目,主要目标是将源代码转换为Linux环境下的汇编语言,以便于使用nasm汇编器进行编译和链接。这个项目对于理解编译器的基本原理和工作流程具有很大的教育意义,同时...
Tiny C Compiler 世界上最小的C编译器。支持C99标准。小而快!可能还有更小的,但有实用意义的就是它。用2012.10.11源码编译的版本。官方不停的更新源代码,但编译好的最新版本是2009年的。 你希望学习C语言,可以...
ANSI C 兼容编译器。90%兼容GCC编辑器,可内联x86汇编, 适合于研究数据结构与算法和编译器的人员使用。真是小而功能齐全。 官方网站有最新版下载: http://bellard.org/tcc/ 在windows/linux下编译自己都是轻而易举! ...
Tiny C Compiler(简称TCC)是一款小巧而快速的C语言编译器,其0.9.26版本提供了源码及适用于Visual Studio的工程文件,包括VS2008和VS2013的支持,使得用户能够进行编译和调试工作。在本文中,我们将深入探讨TCC的...
TCC(Tiny C Compiler)0.9.26源码 VS版工程 已经实现VS2008和VS2013 打开即用 可编译 可调试 建议使用VS2008编译 没分的同学可以去下载无分版: http://download.csdn.net/detail/shen_juntao/8414171
根据提供的信息,本部分将围绕Tiny4412开发板的使用、更新及应用场景进行深入探讨,涵盖嵌入式Linux、C语言、ARM架构等多个技术点。 一、Tiny4412开发板概述 Tiny4412是一款基于ARM9架构的开发板,它为嵌入式Linux...
### nesc手册 tinyos开发语言参考手册 #### 一、简介与背景 nesc(nesC)是一种基于C语言的扩展编程语言,专为TinyOS设计,以体现其结构概念和执行模型。TinyOS是一个事件驱动的操作系统,主要针对资源极其有限的...
《tiny 6410 开发手册》是针对基于Samsung S3C6410处理器的嵌入式系统开发的一份重要参考资料。S3C6410是一款高性能的ARM11架构微处理器,广泛应用于智能手机、平板电脑、数字媒体播放器等设备。这份手册深入浅出地...
Tiny C Compiler(简称TCC)是一款轻量级的C语言编译器,它的设计目标是小巧、快速且易于使用。TCC能够在极短的时间内将C源代码编译成可执行程序,这得益于其独特的即时编译技术。下面将详细讨论TCC的主要特点、工作...
Tiny-C编译器是一款小型但功能完备的C语言编译器,由开发者纯手工编写,没有依赖于常见的词法分析工具Yacc(也称为Bison)和语法分析工具lex(也称为Flex)。这一特点使得Tiny-C编译器的源代码更易理解和维护,同时...
RTX51 TINY 2.02 中文手册知识点总结 本文档对 KEIL 公司的 RTX51 TINY 2.02 版实时操作系统内核进行了详细的介绍和说明。该手册主要面向开发者和工程师,旨在帮助他们快速了解和掌握 RTX51 TINY 2.02 的功能和使用...