歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

配置TC2.0運行環境

一、 學習過程

下載TC2.0並打開如圖:

 

這是一個集成的C語言環境包,包括TC、dosbox和一些編譯工具,很明顯這樣我無法判斷單個程序的功能,也無法區分哪些程序是必須的。

那麼為了搞清楚哪些文件是用來解決哪些功能的,我新建一個文件夾C:\minic用來存放已知要解決問題的文件。

避免程序通過設置搜索路徑的方法找到不在相同目錄的相關文件有兩種方法:(1)不讓設置的默認路徑指向真的包含相關文件的目錄。(2)把我們所要研究的系統的所有文件都拷貝到一個不可能是系統設置的搜索路徑的目錄中。

對於第一種方法,首先要搞清楚程序是怎麼設置默認搜索路徑的,我想起了在配置java環境時需要在系統環境變量裡添加相關路徑,這樣程序在使用時才會根據這個路徑找到安裝的jdk,那麼我們這裡的程序安裝時是自動添加環境變量嗎?如果是這樣,那麼只要改變環境變量即可避免查找,但我們不知道在程序查找時是哪個環境變量起了作用。在網上的一篇資料《頭文件的查找方式和庫的搜索路徑》裡面有這樣一句話:“預設的頭文件目錄是由編譯器自己決定的”,那麼也可以通過新建文件夾的方式避免查找。如果不是只通過特定路徑查找固定文件而是大范圍查找的話,那麼就要搞清楚這個搜索的范圍是多少,是搜索該文件夾下的子目錄,還是搜索所有同級目錄,還是搜索整個盤符的文件,還是搜索系統內的所有文件。於是就可以用方法二新建一個文件夾使它不在搜索范圍內,課本上新建了D:\tc2.0文件夾,說明這個文件夾不在搜索范圍內,但是我的xp虛擬機裡只有一個C盤,於是我決定新建C:\tc文件夾看看,如果這個文件夾在搜索路徑內的話,實驗結果會與資料上不一樣。創建結果如圖:

 

把tc.exe拷貝到c:\minic並運行如圖:

 

說明TC沒有找到所需的文件,該文件夾果然不在搜索范圍內。按確定後發現文件夾中出現了兩個新的文件:

將tc的工作路徑都清空:

編寫simple.c並保存到c:\minic下:

 

用complie編譯顯示成功:

 

在c:\minic\PROJECT中創建了simple.obj:

 

用tc連接simple.obj顯示錯誤: 

 

原因是:unable to open input file ‘COS.OBJ’:

 

 

在C:\minic下沒有simple.exe

那麼我們就在原目錄下找到COS.OBJ放進去,結果出現了下一個錯誤:

 

再找到EMU.LIB放進去,結果出現下一個錯誤:

 

再找到MATHS.LIB放進去,結果出現下一個錯誤:

 

再找到GRAPHICS.LIB放進去,結果出現下一個錯誤:

 

再找到CS.LIB放進去,終於成功生成了simple.exe文件:

 

可知TC連接一個OBJ文件所需的文件是:COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB。 

二、 解決的問題

(1) java等程序是怎麼查找jdk等相關文件的?答:通過系統或用戶的環境變量裡的路徑查找。

(2) TC連接obj文件所需文件都有哪些?答:TC連接一個OBJ文件所需的文件是:COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB。

三、 未解決的問題

(1) TC程序是怎麼設置默認搜索路徑查找相關文件的?

(2) 為什麼TC程序編譯c文件不需要其他文件?

(3) TC連接obj文件的過程是什麼?相關文件的功能都是什麼?

四、 學習感想

我們在面對復雜和未知的事物時,要學會以簡單有效的方式來分析。要在TC程序的原目錄裡找出C語言編譯連接所必須的文件是很困難的。那麼我們不妨換一種思路,TC主程序肯定是必須的,我們把主程序和外部的聯系關閉,再編譯運行文件,根據錯誤提示找出所需的文件。如果最後連接成功,那麼我們找到的文件肯定就是必須的文件。這個思路在編程中很常見,我們把別人的程序拿來看,如果一個文件一個文件地看代碼來搞清楚功能,那麼又費時間又費精力,但是如果從功能實現的角度,我只搞清楚我要實現功能的那部分代碼,甚至我只要清楚這個文件的功能和接口,甚至我只要知道這個程序是工程實現所必須的,就已經足夠了。有句說佛家的三個境界:第一個是“看山是山,看水是水”;第二個是“看山不是山,看水不是水”;第三個是“看山還是山,看水還是水”。把簡單的事物看復雜是要注重每一個細節,把復雜的事物看簡單是注重效率,我們在做事情的時候要合理選擇做事的方式才能事半功倍,實現最大的價值。

Copyright © Linux教程網 All Rights Reserved