hello.h標頭檔案
#ifndef hello_h
#define hello_h
void print_hello();
#endif
hello.c原始檔
#include "hello.h"
#include int main(int argc,char *argv)
[test@hadoop hello]$ ls
hello.c hello.h main.c
[test@hadoop hello]$ gcc -c hello.c
[test@hadoop hello]$ ar crs libhello.a hello.o
[test@hadoop hello]$ gcc -shared -fpic -o libhello.so hello.o
[test@hadoop hello]$ ls
hello.c hello.h hello.o libhello.a libhello.so main.c
[test@hadoop hello]$ gcc main.c -o main -l. -lhello -i.
[test@hadoop hello]$ ldd main
linux-gate.so.1 => (0x00a11000)
libhello.so => /home/test/programs/c/hello/libhello.so (0x0024b000)
libc.so.6 => /lib/libc.so.6 (0x0024d000)
/lib/ld-linux.so.2 (0x0011f000)
看的出, gcc選擇的是libhello.so, 即共享庫優先
[test@hadoop hello]$ ls
hello.c hello.h hello.o libhello.a libhello.so main.c
[test@hadoop hello]$ gcc -static main.c -o main -l. -lhello -i. #使用-static 引數阻止鏈結共享庫
[test@hadoop hello]$ ls
hello.c hello.h hello.o libhello.a libhello.so main main.c
[test@hadoop hello]$ ldd main
not a dynamic executable
看的出, gcc此次選擇的是libhello.a, 即靜態庫
*********hello.h**同上******************
*********hello.c**同上******************
calculate.h標頭檔案
#ifndef calculate_h
#define calculate_h
int add(int a,int b);
#endif
calculate.c原始檔
#include "calculate.h"
int add(int a,int b)
新的測試檔案main.c
#include "hello.h"
#include "calculate.h"
#include int main(int argc,char *argv)
[test@hadoop hello]$ gcc -c calculate.c
[test@hadoop hello]$ ar crs libcalculate.a calculate.o
[test@hadoop hello]$ ls
calculate.c calculate.h calculate.o hello.c hello.h libcalculate.a libhello.so main.c
[test@hadoop hello]$ gcc main.c -o main -l. -lhello -lcalculate -i.
[test@hadoop hello]$ ls
calculate.c calculate.h calculate.o hello.c hello.h libcalculate.a libhello.so main main.c
[test@hadoop hello]$ ldd main
linux-gate.so.1 => (0x00769000)
libhello.so => /home/test/programs/c/hello/libhello.so (0x00c6d000)
libc.so.6 => /lib/libc.so.6 (0x0013e000)
/lib/ld-linux.so.2 (0x0011f000)
看得出, 我們成功了:)
gcc編譯靜態庫和動態庫
一 動態鏈結庫 1.建立hello.so動態庫 cpp view plain copy print?include voidhello 編譯 gcc fpic shared hello.c o libhello.so include void hello 編譯 gcc fpic shared hel...
gcc編譯流程和 gcc靜態庫和動態庫 二
linux gcc常用命令 1示例程式如下 複製 include int main void 複製 這個程式,一步到位的編譯指令是 gcc test.c o test 實質上,上述編譯過程是分為四個階段進行的,即預處理 也稱預編譯,preprocessing 編譯 compilation 彙編 as...
GCC執行過程 gcc編譯靜態庫和動態庫
1 預處理階段 這個階段主要是處理原始檔中的 ifdef include和 define命令 命令 gcc e c o i 2 編譯階段 輸入的是中間檔案 i,編譯後生成組合語言檔案 s 命令 gcc s i o s 3 彙編階段 輸入的是彙編檔案 s,輸出的轉換生成的機器語言 o 命令 gcc c...