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換成多任務的文件。