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

Unix操作系統命令行知識講解

unix命令

我們知道在Unix操作系統中,實現C源程序到可執行文件的這一轉換過程的工具是cc。在大多數系統中cc實際上是一個shell命令文件。有些Unix操作系統中的C編譯程序可能並不叫cc而是其它的一個什麼名稱,如Sun工作站上常用的gcc等等。但這些都無關緊要。

大多數Unix操作系統中C編譯命令的用法基本上都是類似的。我們這裡介紹的將以SVR4上的C編譯系統為基礎。

在某個程序的源代碼被存放到多個不同文件中的情況下,我們只需要在命令行中一一指定這多個C文件即可。例如,我們可以將上述myprog.c拆分為兩個C文件和一個頭文件
(.h)如下:
 

  1. myprog.h  
  2. # include <stdio.h>;  
  3. # inclued <ctype.h>;  
  4. # define TESTOK 1  
  5. myprog.c  
  6. #include "myprog.h"  
  7. void main (int argc,char * argv[])  
  8. {int i;  
  9. for (i=1;i<argc;i + +)  
  10. if (TestInput(argv)= = TESTOL)  
  11. printf("The %dth value '%s' \tis ok! \n",argv[1]);  
  12. else  
  13. printf("The %dth value ' %s' \tis BAD! \n",iargv);  
  14. }  
  15. myfunc.c  
  16. #include "myprog.h"  
  17. int TestInput(char * ValueInput)  
  18. {while (* ValueInput)  
  19. if (!isdigit(*ValueInput) return (! TESTOK);  
  20. else     ValueInput + +  
  21. return ((100/atoi(ValueInput))? TESTOK:! TESTOK); 

這時要再編譯此程序時可輸入如下命令:$ cc -o myprog myprog.c myfunc.c

在這個命令行中如果不指定myfunc.c,此時由於在myprog.c中所調用的TestInput()這個函數不是任何標准的庫函數,在鏈接時鏈接程序將找不到此符號的定義,故鏈接過程將以失敗而告終,此時cc將給出如下的錯誤信息:
 

  1. Undefine      first referenced  
  2. symbol          in file  
  3. TestInput         myprog.o  
  4. id: myprog:fatal error: Symbol referencing errors.No output written to myprog ___FCKpd___1nbsp;

而可執行文件myprog也無法生成。但編譯卻會生成myprog.c的目標代碼(在某個文件固有語法錯誤而無法正確被編譯的情況下(此時為編譯過程出錯),cc將生成其他無語法錯誤的源文件的目標文件,但不進行鏈接)。如下:

 

  1. ___FCKpd___2nbsp;ls -ltotal 8  
  2. rw-r--r-- 1 yxz user 454 Sep 1 09:27 myfunc.c  
  3. rw-r--r-- 1 yxz user 479 Sep 1 09:28 myprog.c  
  4. rw-r--r-- 1 yxz user 298 Sep 1 09:27 myprog.h  
  5. rw-r--r-- 1 yxz user 924 Sep 1 09:28 myfunc.o 

此時我們可以使用如下命令行得到可執行文件:$ cc -o myprog myprog.o myfunc.c
這裡我們看到,cc命令行中的文件參數可以不全是.c文件,目標文件(.o)文件以後編譯過程中所得到的其他文件,如預編譯後文件(.i文件),編譯後的匯編程序(.s文件)等都可作為文件參數。在了解了Unix操作系統 C編譯系統的工作過程之後,理解這一點是不困難的。因為編譯系統只需要對各種不同類型的文件進行有關的處理就可以了。

關於cc命令最基本的用法我們就介紹這麼多,其它更高級的用法可參考以後關於Unix操作系統知識的討論。

Copyright © Linux教程網 All Rights Reserved