動態庫的引入及減少了主**檔案的大小,同時生成的動態庫又是動態載入的,只有執行的時候才去載入,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差不多,使用時才載入。得到了...