makefile-動態鏈接庫(*.so)

目錄文件

$ ls
hello.c  hello.h  libhello.so  main  main.c

hello.c

#include "hello.h"
void hello(void)
{
    printf("show hello\r\n");
}

hello.h

#ifndef _HELLO_H_
#define _HELLO_H_

#include <stdio.h>

void hello(void);

#endif /* _HELLO_H_ */

生成動態鏈接庫libhello.so

$ gcc hello.c -fPIC -shared -o libhello.so

main.c 內容

#include "hello.h"
int main(void)
{
    hello();
    return 0;
}

使用動態鏈接庫生成執行文件main

gcc -o main main.c -L. -lhello

顯示main的dependency,看到并沒有找到libhello.so庫 (libhello.so => not found)

$ ldd main
    linux-vdso.so.1 =>  (0x00007ffdd9b68000)
    libhello.so => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f36952a9000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3695673000)

設置LD_LIBRARY_PATH,添加當前目錄,這樣就能找到libhello.so庫了

$ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 

再次查看main的dependency:

$ ldd main
    linux-vdso.so.1 =>  (0x00007ffdf385f000)
    libhello.so => ./libhello.so (0x00007f41b875a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f41b8390000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f41b895c000)

執行main

$ ./main 
show hello
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容