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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章