LINUX下C語言編程調用其他函數、連結標頭檔以及庫檔案

來源:互聯網
上載者:User

標籤:目錄   執行檔案   其他   連結   blog   clu   相加   makefile   str   

LINUX下C語言編程經常需要連結其他函數,而其他函數一般都放在另外.c檔案中,或者打包放在一個庫檔案裡面,我需要在main函數中調用這些函數,主要有如下幾種方法:

1.當需要調用函數的個數比較少時,可以直接在main函數中包含該檔案,比如一個檔案夾下包含add.c和main.c檔案:

方法一:

     檔案add.c定義兩個整數相加的函數,code如下:

#include <stdio.h>#include <math.h>intadd(int a,int b){   int z;   z=a+b;   return z;}

    主函數main.c的code如下:

#include <stdio.h>#include <math.h>#include"add.c"intmain(){    int i, j, k;    i=1;    j=2;    k=add(i,j);    printf("i add j=%d\n", k);}

編譯產生可執行檔:gcc -o main main.c

執行:  ./main

方法二:

可以通過寫個標頭檔聲明下函數add,然後在main函數中包含該檔案,再寫個makefile檔案,將其連結好即可,實現如下:

建立fun.h, code如下:

#ifndef _FUN_H_#define _FUN_H_#endif#include<stdio.h>#include<math.h>int add(int a,int b);

此時main函數應當包含這個標頭檔,main函數改為如下:

#include <stdio.h>#include <math.h>#include"fun.h"intmain(){    int i, j, k;    i=1;    j=2;    k=add(i,j);    printf("i add j=%d\n", k);}

 寫個簡單的makefile,編譯

main:main.o add.o     gcc main.o add.o -o mainmain.o:main.c fun.h add.c    gcc -c main.c -o main.oadd.o:add.c fun.h    gcc -c add.c -o add.o

make ,即可得到可執行檔main

./main ,就得到結果。

2.當定義的函數比較多時,這時可以將其打包放在一個庫檔案裡面,然後在編譯main函數時連結該庫檔案即可,庫檔案分為動態庫和靜態庫,其連結方法如下:

比如:
目錄1:/home/文檔/libraries_test/head //裡面有 add.c multi.c  (multi.c定義為兩個整數相乘,這裡沒有列出)
目錄2:/home/文檔/libraries_test/test_head //裡面有函數,需要包含目錄一裡的標頭檔 main.c

靜態庫連結:

cd 目錄1

寫個makefile檔案,產生靜態庫。makefile內容如下:

add.o:add.c        gcc -c add.c -o add.o   multi.o:multi.c        gcc -c multi.c -o multi.o   libhead.a:add.o multi.o       ar crv libhead.a add.o multi.o

然後:make
產生了libhead.a檔案

cd 目錄2

寫個makefile檔案,產生可執行檔

main:main.c      gcc main.c -I${目錄1}$ -o main -L${目錄1}$ -lhead

注意:-I..這個路徑指的是標頭檔的路徑(由於這裡沒有標頭檔,可以去掉-I{目錄1})
-L...這個指的是庫的路徑,-l..這裡指的是庫名,如果需要引用-L..下的兩個庫(如libblas.a libcblas.a)
這個時候就這樣寫: -L... -lcblas -lblas (注意:雖然用的是libcblas.a和libblas.a 但是在寫路徑時,只需寫cblas和blas,即省略lib .a)

注意啦!!!!如將該.a檔案放在/usr/lib或者/usr/local/lib下(gcc預設的庫搜尋路徑下,由於/usr/lib下庫檔案比較多,我一般把常用的庫放在/usr/local/lib下),此時就不需要指定路徑了,這個時候編譯:
gcc test1.c -o test -lcblas -lblas (注意編譯的時候一定要用 -l.. 指定是哪個庫)

動態庫連結:

cd 目錄1  

寫個makefile檔案,產生動態庫。makefile內容如下:

add.o:add.c head.h
  gcc -c add.c -o add.o
multi.o:multi.c head.c gcc -c multi.c -o multi.o
libhead.so:add.o multi.o gcc -o libhead.so -fPIC add.o multi.o

然後:make
產生了libhead.so檔案

cd 目錄2
寫個makefile檔案,產生可執行檔
makefile檔案產生如下:

main:main.c    gcc main.c -I${目錄1}$ -o main -Wl,-rpath,${目錄1}$ -lhead

make即可產生可執行檔main,然後執行即可。 

 

LINUX下C語言編程調用其他函數、連結標頭檔以及庫檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.