Linux下使用gcc進行靜態編譯和使用動態連結庫編譯
阿新 • • 發佈:2019-02-06
/home/plus/demo下有main.c和func.c兩個檔案:
func.c:
int func(int a)
{
return a+1;
}
main.c:
#include <stdio.h>
extern int b;
int func(int a);
int main()
{
b = func(1);
printf("%d\n", b);
}
1.靜態編譯
法1:gcc main.c func.c生成的可執行檔案是當前路徑下的a.out,執行./a.out即可得到程式執行結果;
法2:gcc main.c func.c -o main ,執行./main即可;
2.使用動態連結庫
將這個func.c編譯成獨立的與具體的連線地址無關的.o目標檔案:
gcc -fPIC -c func.c -o func.o
然後 再開始建立動態連結庫檔案:
gcc -shared func.o -o libfunc.so
將庫檔案的目錄新增到環境變數中:
export LD_LIBRARY_PATH=/home/plus/demo/
給main.c指定使用的庫進行編譯:
gcc main.c -o main libfunc.so
執行:
./main