linux動態鏈接
阿新 • • 發佈:2018-02-01
設置 pre 文件搜索 lte 刷新緩存 測試 -fpic workspace linu 1, 編譯,使用-shared和-fpic 生成動態鏈接庫
庫源碼:test.c
庫源碼:test.c
#include <stdio.h> #include <string.h> #include <stdlib.h> static void printline(int len) { int i; for(i = 0;i<len;i++) { printf("="); } printf("\n"); } void print(char * s) { int len = 0; int i = 0; if(!s || *s == ‘\0‘) { return ; } len = strlen(s); printline(len); printf("%s\n",s); printline(len); }
頭文件:test.h
#ifndef __TEST_H__
#define __TEST_H__
void print(char * s);
#endif
編譯庫文件:
gcc test.c -shared -fpic -o libtest.so
2.編譯測試代碼
測試代碼:main.c
#include "test.h"
int main()
{
char teststr[] = "hello world";
print(teststr);
return 0;
}
編譯測試代碼
gcc main.c -L./ -ltest -o main
3.運行
當運行時,發現找不到庫文件
./main: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
這個是linux庫文件搜索路徑的問題,有兩個解決方式
- 在/etc/ld.so.conf.d/下編寫配置文件,指定庫路徑,然後使用ldconfig去刷新緩存
- 在執行前設置環境變量 LD_LIBRARY_PATH,指定當前的路徑,再去執行時,則現在本地去搜索
root@GFD:~/workspace/so_test# export LD_LIBRARY_PATH=./ root@GFD:~/workspace/so_test# ./main =========== hello world ===========
linux動態鏈接