tcc编译
① 在TC中,怎样用命令编译lib库
定义函数库的方法及应用:
一、2个相关的命令
1、TCC——TC的DOS下的命令行编译连接工具
2、TLIB——TC的DOS下的库操作工具
二、1个自定义的函数库的例子
1、
在TC集成环境下,编一个文件USERADD.C
#define
_NO_MAIN
int
add(int
*a,int
*b)
{
int
c;
c=(*a)+(*b);
return
c;
}
按ALT—F9编译
生成一个
USERADD.OBJ文件。
2、按F10—F—O
退到DOSSHELL(DOS环境下)
COPY
USERADD.OBJ
到
..\LIB目录,在\LIB目录下执行
TLIB
USERLIB.LIB+USERADD.OBJ
就生成了一个自己的函数库
USERLIB,在这个函数库里就包含了函数模块
int
add(int
*a,int
*b)
的二进制代码。现在已经将自定义的函数放进了函数库,就可以把原文件USERADD.C删掉不要了。(当然,为了以后维护方便,还是作一个备份为好)。
以后如有其它的函数模块,也可以编译后用TLIB
命令加入到这个函数库里。
3、写一个包含文件
USER1.H,写完后COPY到INCLUDE
目录。内容如下:
int
add(int
*,int
*);
4、作好了以上的自定义函数库的准备工作,现在就可以使用了。
写一个程序,取名为ADD-1.C,在程序中调用库函数add(
);
#include
#include
void
main(
)
{
int
a,b,c;
a=20;b=30;
c=add(&a,&b);
printf(“%d”,c);
}
5、在DOS命令行下,执行
TCC
ADD-1.C
..\LIB\USERLIB.LIB
就OK!
运行ADD-1.EXE,可以看到输出结果
50
Tc生成lib的方法:
扩展库与自建LIB库使用扩展库TC所带的库在有的情况下是无法满足功能要求的,自己写一个太麻烦,找到了一个LIB库又怕不会用。在WIN-TC中,对于使用外部的扩展库(第三方LIB)提供了一个方便的解决方法:首先要确定你的LIB库是FOR
TC版本的而不是FOR
VC或是其它的。如果确定是FOR
TC的版本的话就把你的首标文件(或称头文件),就是扩展名为*.h的文件拷贝到WIN-TC的include目录里,然后把相应名称的*.lib文件拷贝到lib目录,然后再运行WIN-TC时选择“编译配置”菜单项,你会看到扩展库信息栏目里有你的LIB库文件名在上面了,但是没有打钩。然后你把它钩选后再“确定”保存,以后的编译程序时就自动链接该扩展库了。自建立LIB库将自己的代码编译成LIB库的格式有利与保护自己的代码版权。如何来生成自己的LIB库呢?请按照下面的方法:
STEP
1——生成目标代码(OBJ)
建立mylib的代码文件/*********************
mylib.c
*********************/void
myfun(){printf("
myfun()
in
mylib.lib
");}然后保存为WIN-TC目录下的mylib.c文件然后到菜单项:运行->编译设置
看看“产生
OBJ
文件”是否已选择,若未选择则选择之。然后回到主界面,点“编译链接”按钮(F9
查看原帖>>
② tcc编译器只能编译tcc文件夹内部的文件吗
no !!
看下面地址的详细介绍tcc的用法
http://www.ibm.com/developerworks/cn/linux/l-tinyc/part1/
③ 怎样用命令行在TC中编译程序
Turbo C++ Version 3.00 Copyright (c) 1992 Borland International
Syntax is:
TCC [options] file[s]
[ * = default; -x- = turn switch x off ]
[options]
-1 80186/286 Instructions
-2 80286 Protected Mode Inst.
-Ax Disable extensions
-B Compile via assembly
-C Allow nested comments
-Dxxx Define macro
-Exxx Alternate Assembler name
-G Generate for speed
-Ixxx Include files directory
-K Default char is unsigned
-Lxxx Libraries directory
-M Generate link map
-N Check stack overflow
-O Optimize jumps
-P Force C++ compile
-Qxxx Memory usage control
-S Proce assembly output
-Txxx Set assembler option
-Uxxx Undefine macro
-Vx Virtual table control
-X Suppress autodep. output
-Yx Overlay control
-Z Suppress register reloads
-a Generate word alignment
-b * Treat enums as integers
-c Compile only
-d Merge plicate strings
-exxx Executable file name
-fxx Floating point options
-gN Stop after N warnings
-iN Max. identifier length
-jN Stop after N errors
-k Standard stack frame
-lx Set linker option
-mx Set Memory Model
-nxxx Output file directory
-oxxx Object file name
-p Pascal calls
-r * Register variables
-u * Underscores on externs
-v Source level debugging
-wxxx Warning control
-y Proce line number info
-zxxx Set segment names
④ 怎么把TCC编译器安装在android上
先下GCC FOR C4DROID
安装之后运行里面的解压。。往ROM里安还是SD卡里安都可以。。
然后卸载掉。。
再装一个C4DROID..
最后在选项里选G++ + Bionic
⑤ C#调用TCC编译器问题
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false ;
p.StartInfo.Arguments = "/c" + "command";
p.StartInfo.WorkingDirectory = "D:\\\\Win-TC\\\\bin\\\\20cn";
p.Start();
p.StandardInput.WriteLine( "tcc 2.c");
⑥ TC下如何用命令行编译一个.c的文件,并且输出它生成的汇编代码
靠。看帮助,TC有文本文件的帮助,全是命令开关变量,10多年前用的忘了啊。好像编译命令是tcc? 貌似输入tcc/? tcc/H 会列出所有开关的含义,很长,用tcc/? >tcch.txt存到文本文件里看方便啊。
⑦ 如何读取tcc.exe编译文件时的错误信息
我用C#写的 首先你需要把turbo c的系统环境变量(path)设置一下
public string RunCmd(string command)
{
Process p = new Process();
//Process类有一个StartInfo属性,这个是ProcessStartInfo类,包括了一些属性和方法,下面我们用到了他的几个属性:
p.StartInfo.FileName = "cmd.exe"; //设定程序名
// p.StartInfo.Arguments = "/c " + command; //设定程式执行参数
p.StartInfo.UseShellExecute = false; //关闭Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向标准输出
p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
p.StartInfo.RedirectStandardError = true; //重定向错误输出
p.StartInfo.CreateNoWindow = false; //设置不显示窗口
p.Start(); //启动
p.StandardInput.WriteLine("tcc " + command); //用tcc命令将文件进行编译 ,command是文件路径
p.StandardInput.WriteLine("exit");
cmdend();
return p.StandardOutput.ReadToEnd(); //从输出流得到命令行结果
}
private void cmdend()
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false;
p.Start();
p.StandardInput.WriteLine("cmdend");//cmdend.bat 文件里面内容 taskkill /f /im cmd.exe
}
⑧ c语言编译tc2.0怎么用
拷贝一些给你,一般编译器要注意的就是include目录和lib目录,还有就是编译器调用的tcc,tlink之类的要在路径内。不过简单的菜单还是学一下吧,学编程还是需要一些英语的。
⒈首先要确保名为turboc.CFG的文件与TCC.EXE位于同一
目录下如同在C:\TC目录下。turboc.CFG的全部内容是
-IC:\TC\INCLUDE
-LC:\TC\LIB
它的作用是告诉TCC.EXE,.h文件和.lib文件在哪里。
⒉最简单的情形——当只需要编译连接一个C源文件
设含主函数main()的文件名为mfile.c(下同)
则用以下命令之一可使编译、连接"一步到位":
① tcc -f87 mfile.c <回车>
② tcc mfile.c <回车>
③ tcc mfile <回车>
命令①的效果优于命令②③因为 -f87 启动了协处理器
从而使最终得到的可执行文件mfile.exe代码短,速度快
命令②③的效果是用软件仿真协处理器的8087指令代码
既长速度且慢。当然如果机器上没有协处理器就只能采
用命令②或③了。若源文件的扩展名是c,则只须输入文
件的主名,小数点和'c'一并省略,故命令②③效果相同
【注】如果C源文件的扩展名不是c,则又分两种情况:
若无扩展名(例如:仅有主名mfile)则编译连接命令应为
tcc -f87 mfile. <回车>
别忘了末尾那个小数点!
若有扩展名(例如:mfile.cpp)则编译连接命令应为
tcc -f87 mfile.cpp <回车>
⒊较复杂的情形——数个C源文件编译后连接为一个程序
设除了源文件mfile.c外,还有1.sub和2.fun两个源文件
则此时"一步到位"的既编译又连接的命令如下:
tcc [-f87] mfile[.c] 1.sub 2.fun <回车>
以上含方括号[]的项表示可选择项(下同)。该命令的效
果是顺序编译这些C源文件因而先后生成以下目标文件
mfile.obj,1.obj,2.obj 随后连接并生成 mfile.exe
换言之以上命令的效果等价于下面所列命令序列的效果
tcc -c mfile[.c] <回车>
tcc -c 1.sub <回车>
tcc -c 2.fun <回车>
tcc [-f87] mfile.obj 1.obj 2.obj <回车>
应当指出:-f87 开关对于编译不起作用,但在连接阶段
将引导连接器TLINK.EXE与库文件 C:\TC\LIB\FP87.LIB
连接而不是缺省时的模拟库文件 C:\TC\LIB\EMU.LIB。
⒋更复杂的情形——C主文件和汇编模块连接为一个程序
设除源文件mfile.c外,还有汇编模块sub.asm和fun.asm
此时"一步到位"的既编译、汇编又连接的命令如下:
tcc [-f87] -B mfile[.c] sub.asm fun.asm <回车>
以上命令的效果等价于下面所列命令序列的效果:
tcc -c mfile[.c] <回车>
tasm -Mx sub[.asm] <回车>
tasm -Mx fun[.asm] <回车>
tcc [-f87] mfile.obj sub.obj fun.obj <回车>
⒌内存模式——Tiny,Small,Compact,Medium,Lagre,Huge
对应的开关是 -mt, -ms(缺省), -mc, -mm, -ml, -mh
注意该开关对于编译和对于连接都是有意义的。例如:
tcc -ml mfile[.c] <回车>
等价于这样2条命令:
① tcc -ml -c mfile[.c] <回车>
② tcc -ml mfile.obj <回车>
命令①中的 -ml 告诉编译器:代码和数据都是"远"的。
命令②中的 -ml 告诉连接器:连接MATHL.LIB和CL.LIB
⒍混合模式编程。例如:总体上是SMALL模式,但希望调用
按LARGE模式编写的函数。这是可以做到的,关键在函数
声明语句要强调代码和数据的 far 属性。 有这样一个
具体例子。在MS-Fortran4.0的库LLIBFR7.LIB中有个名
为CIXTOMX.OBJ的模块,其中定义了4个"远"函数。用C
语言编程调用这4个函数的关键是正确的函数原型声明
extern void far fmsbintoieee(float far*,float far*);
extern void far dmsbintoieee(double far*,double far*);
extern void far fieeetomsbin(float far*,float far*);
extern void far dieeetomsbin(double far*,double far*);
这样声明后,即使用 -ms 进行编译连接也能正常运行。
完整的程序见 D:\FOR4.0\ 目录下的
MS.C,CIXTOMX.OBJ,IXTOMX.OBJ,MS.EXE,ML.C,ML.EXE。
⒎连接阶段如何用TLINK.EXE完成。对于
tcc -f87 mfile.obj sub.obj fun.obj <回车>
在缺省的SMALL模式下也可以用以下命令实现连接:
TLINK c0S mfile sub fun,mfile,nul,maths fp87 cs <回车>
同理对于
tcc -ml mfile.obj sub.obj fun.obj <回车>
则相当于执行下列命令:
TLINK c0L mfile sub fun,mfile,nul,maths emu cs <回车>
其中启动代码即C的初始化程序C0S.OBJ或C0L.OBJ可以
在C:\TC\LIB\下找到,它们的源程序在C:\TC\STARTUP\
目录下——该目录中的MAIN.C程序也值得关注。
⑨ 为什么我的TC2.0 在dos界面使用tcc 编译文件出现Error test3.c 1: Unable to open include file 'stdio.h
还是用XP的吧,不然就算成了EXE文件,也可能不能运行,,
实在想在win7的话,,如果不涉及到图形的话,可以用TCC。。又小又正常,,
⑩ 如何配置使用联合编译器incredibuild
1.make文件夹里面的Gsm2.mak修改make工具的编译项为IncredBuild增加运行参数
#@echo tools\make.exe -fmake\comp.mak -r -R COMPONENT=$* ... $(strip $(COMPLOGDIR))\$*.log
@if /I %OS% EQU WINDOWS_NT \
(if /I $(BM_NEW) EQU TRUE \
(XGConsole /command="tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1" /NOLOGO /profile="tools\XGConsole.xml") \
else \
(XGConsole /command="tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1" /NOLOGO /profile="tools\XGConsole.xml") \
) \
else \
(if /I $(BM_NEW) EQU TRUE \
(tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \
else \
(tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \
)
@type $(strip $(COMPLOGDIR))\$*.log >> $(LOG)
@perl .\tools\chk_lib_err_warn.pl $(strip $(COMPLOGDIR))\$*.log
2.tools工具夹里面加入 XGConsole.xml
内容为
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
<Tools>
<Tool Filename="perl" AllowRemote="true" />
<Tool Filename="make" AllowIntercept="true" />
<Tool Filename="tcc" AllowRemote="true" />
<Tool Filename="tcpp" AllowRemote="true" />
<Tool Filename="armcc" AllowRemote="true" />
<Tool Filename="armcpp" AllowRemote="true" />
<Tool Filename="strcmpex" AllowRemote="true" />
<Tool Filename="warp" AllowRemote="true" />
<Tool Filename="armar" AllowRemote="false" />
<Tool Filename="formelf" AllowRemote="false" />
</Tools>
</Profile>
3.tools工具夹里面的make2.pl修改以下几行
if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new") ||
($action eq "c,r") || ($action eq "c,u")) {
if ($ENV{"NUMBER_OF_PROCESSORS"} > 1) {
if ($fullOpts eq "") {
$fullOpts = "CMD_ARGU=-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
} else {
$fullOpts .= ",-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
}
}
}
改为
if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new") ||
($action eq "c,r") || ($action eq "c,u")) {
if ($ENV{"NUMBER_OF_PROCESSORS"} >= 1) {
if ($fullOpts eq "") {
$fullOpts = "CMD_ARGU=-j$ENV{\"NUMBER_OF_PROCESSORS\"}"."0";
} else {
$fullOpts .= ",-j$ENV{\"NUMBER_OF_PROCESSORS\"}"."0";
}
}
}
$ENV{"NUMBER_OF_PROCESSORS"} = 10; //修改为你想要的进程数
4.把tools里面的make.exe换成多任务的文件。