void display(void)
{
printf("hello world\n");
}
hello.h文件:#ifndef __HELLO_H
#define __HELLO_H
void display(void);
#endif
B、編譯源碼庫文件gcc -o hello.o -c hello.c生成hello.o目標文件C、將目標文件歸檔生成靜態鏈接庫文件ar -cr libhello.a hello.oD、發布靜態鏈接庫一般來說,靜態鏈接庫需要發布libxxx.a和.h文件,.h文件可以讓第三方開發者了解靜態鏈接庫中的各函數的功能和函數聲明,libxxx.a文件是第三方開發者在調用靜態鏈接庫中的函數後在編譯鏈接階段鏈接的庫。
{
display();
return 0;
}
C、編譯工程文件編譯工程文件時,需要在編譯鏈接時添加相關選項:-Lpath:表示在path目錄中搜索庫文件,如-L.則表示在當前目錄。-lxxx:表示要鏈接的靜態鏈接庫為libxxx.a-static:表示將所有鏈接的庫靜態加載gcc -o main main.c -L. -lhello
void display(void)
{
printf("hello world\n");
}
hello.h文件:#ifndef __HELLO_H
#define __HELLO_H
void display(void);
#endif
B、編譯源碼庫文件gcc -fPIC -c hello.c -o hello.o生成目標文件hello.o-fPIC選項的作用是使得gcc生成的代碼是位置無關的
C、生成動態鏈接庫gcc -shared -o libhello.so hello.o生成動態鏈接庫libhello.so文件-shared選項告訴編譯器生成一個動態鏈接庫
{
display();
return 0;
}
C、編譯工程文件編譯工程文件時,需要在編譯鏈接時添加相關選項:-Lpath:表示在path目錄中搜索庫文件,如-L.則表示在當前目錄。-lxxx:表示要鏈接的動態鏈接庫為libxxx.so gcc -o main main.c -L. -lhelloD、將動態鏈接庫文件注冊到系統環境變量中的庫加載路徑方法一:將動態鏈接庫文件拷貝到系統環境變量中的庫加載路徑中的某個目錄cp libhello.so /usr/lib方法二:將當前目錄添加為統環境變量中的庫加載路徑把當前工作目錄加入動態鏈接庫的搜索路徑配置文件/etc/ld.so.conf中。
如果沒有以上操作,運行時程序將會報錯:error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory程序運行時將會到相應目錄下加載動態鏈接庫中的函數執行。E、程序運行時的庫依賴ldd命令可以查詢程序運行時需要的依賴庫ldd mainlinux-vdso.so.1 => (0x00007fff265d8000)libhello.so => /usr/lib/libhello.so (0x00007f15d8af1000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f15d8733000)/lib64/ld-linux-x86-64.so.2 (0x00007f15d8d05000)
本文出自 “生命不息,奮斗不止” 博客,請務必保留此出處http://9291927.blog.51cto.com/9281927/1790676