Makefile 編譯動態鏈接庫和靜態鏈接庫

有一點切記,使用tab而不是空格,有可能在vi下面編輯的時候,vi將tab給辦的成空格了,纔會出現:

*** missing separator.  Stop.

在vi中設置不將tab轉換成空格 

"set expandtab   //將tab轉換成空格
set noexpandtab //保留tab形式


CXX = g++ 

CC = gcc 
LD = ld
CFLAGS = -g -Wall 
LDFLAGS = -shared -fpic
SRCS = test.cpp test1.cpp
TGT = $(SRCS:.cpp=.o)


all : libtest.a libtest.so
libtest.a:$(TGT)
    ar cru libtest.a $(TGT)
    ranlib libtest.a
libtest.so:$(TGT)
    $(LD) $(TGT) $(LDFLAGS) -o $@


%.o:%.cpp
    $(CXX) $? -c $(CFLAGS)


clean: 

    rm -f *so *.o *a



將庫存放在特定的目錄下

~/scylla/solib


BASEDIR = $(HOME)/scylla
INC = $(BASEDIR)/include
SOLIB = $(BASEDIR)/solib
SLIB = $(BASEDIR)/slib






CXX = g++ 
CC = gcc 
LD = ld
CFLAGS = -g -Wall 
LDFLAGS = -shared -fpic
SRCS = test.cpp test1.cpp
TGT = $(SRCS:.cpp=.o)


slib_1 = $(SLIB)/libtest.a
solib_1 = $(SOLIB)/libtest.so


all:$(slib_1) $(solib_1)
$(slib_1):$(TGT)
    ar cru $(slib_1) $(TGT)
    ranlib $(slib_1)
#   mv libtest.a ~/scylla/slib/
$(solib_1):$(TGT)
    $(LD) $(TGT) $(LDFLAGS) -o $@
#   mv libtest.so ~/scylla/solib/
%.o:%.cpp
    $(CXX) $? -c $(CFLAGS)


main:main.o $(SOLIB)/libtest.so
    $(CXX) main.o $(SOLIB)/libtest.so -rdynamic -s -o main


main_s:main.o libtest.a
    $(CXX) main.o libtest.a -rdynamic -s -o main_s
clean: 
    rm -f *so *.o *a


在 /etc/ld.so.conf中添加一行

~/scylla/sobli/

執行命令ldconfig (root 權限)

使用ldconfig -p | grep "新添加的so"來查看是否有收的so添加進去

也可以使用export LD_LOADLIB_PATH=~/scylla/solib/

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章