linux 下生成動態庫 so並引用

2021-06-27 18:21:15 字數 1133 閱讀 4101

動態庫的引入及減少了主**檔案的大小,同時生成的動態庫又是動態載入的,只有執行的時候才去載入,linux 下的 動態庫 .so 就像windows下的 dll一樣。有關動態庫的概念自行上網搜。一下是建立及引用動態庫

test_so.h

#ifndef test_so_h

#define test_so_h

void test_a();

void test_b();

#endif

test_a.c

#include #include "test_so.h"

void test_a()

test_b.c

#include #include "test_so.h"

void test_b()

test.c

#include #include "test_so.h"

void main()

makefile

#!/bin/sh 

file_1 := test_a.c

file_2 := test_b.c

main_file := test.c

out_file := test

daymic_lib := .so

out_so_name := lib$(out_file)$(daymic_lib)

.phony:all

all:

gcc $ $ -fpic -shared -o $(out_so_name)

gcc $ -o $ -l. -l$

注意:生成的 xx.so檔案要新增他的路徑,否則載入不上

用 export ld_library_path=./  或者在 /etc/ld.so.conf中加入***.so所在的目錄,然後/sbin/ldconfig –v更新一下配置

即可。makfile中兩個變數引用 $$,在 xx_1後面一定不要有空格,否則引用變數的時候會把該空格引入其中,但是做這個例子的時候就遇到過這個問題,後來查詢半天才發現,希望引以為戒。

Linux下生成 so檔案

linux下的.so檔案即shared libraries。shared library 是程式執行時載入的庫檔案。當乙個shared library 被成功的安裝以後,之後啟動的所有程式都會自動使用最新的shared library。也就是說,生成乙個.so檔案並告訴編譯器它的位置之後,所有的需要...

linux下生成 so檔案和 a檔案

test.h 1 ifndef test h 2 define test h 34 void testa 5void testb 67 endif test a.cpp 1 include 2 include test.h 3 4void testa 5 test b.cpp 1 include 2...

linux下生成 so檔案和 a檔案

1.o 就相當於windows裡的obj檔案 乙個.c或.cpp檔案對應乙個.o檔案 a 是好多個.o合在一起,用於靜態連線 即static mode,多個.a可以鏈結生成乙個exe的可執行檔案 so 是shared object,用於動態連線的,和windows的dll差不多,使用時才載入。得到了...