2015年7月19日 星期日

[C筆記]靜態程式庫(共用.h檔與共用.o檔)

前言:之前有提過為了不寫出臃腫不堪的程式碼,我們應該講每個功能(方法)分散寫到不同的.c檔(利用.h檔來共用方法),這裡記錄該如何在gcc下將不同目錄的.h及.o連結到一起!


main.c檔案的位置


checksum.h檔案位置


encrypt.h檔案位置



checksum.o及encrypt.o的位置


main.c code


#include <stdio.h>
#include <stdlib.h>
#include "encrypt.h"
#include "checksum.h"

int main(int argc, char *argv[])
{
  char s[]="speak sumthing";
  encrypt(s);
  printf("encrypt is %s\n",s);
  printf("checksum is %i\n",checksum(s));
  
   encrypt(s);
  printf("encrypt is %s\n",s);
  printf("checksum is %i\n",checksum(s));

  return 0;
}

checksum.c code


#include "checksum.h"

int checksum(char *s)
{
    int sum =0;
    while(*s)
    {
      sum= sum +*s;
      s++;
      }
      return sum;
 }

encrypt.c code


#include "encrypt.h"

void encrypt(char *s)
{
     while(*s)
     {
              *s=*s^31;
              s++;
      }
     
 }


gcc指令 與 執行結果



-I 告知.h檔的位置(folder  folder2  2個位置都存在.h檔)
-o檔直接告知my_object_file/encrypt.o
                        my_object_file/checksum.o



將.o收集到收藏檔(.a檔)裡面

建立收藏檔指令 ar rcs libfilename.a  file1.o file2.o <----要收藏的.o檔

建立.a檔開頭一定要lib

執行gcc main.c -L . -lfilename -o try 

-L .  <---注意 當收藏檔放在自己的目錄下一定要用-L告知 .當下目錄的意思


此範例用.a檔實作:


題外話在linux底下gcc指令  有關路徑的話必須先加上/

例如-I /folder    -L/where

沒有留言:

張貼留言