怎么编写Makefile生成静态库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么编写Makefile生成静态库相关的知识,希望对你有一定的参考价值。

参考技术A 编写Makefile生成静态库的方法:
方法一
//////////////////////////////////////////////////////////////////
divFIX=/usr
LIBDIR=$(divFIX)/lib
INCLUDEDIR=$(divFIX)/include
#$(DESTDIR) is usally empty. rpmbuild needs it.
DESTDIR=
CC=gcc
CFLAGS=
LIBS=
INCLUDES=
AR=ar
all: hello.a
hello.a: file1.o file2.o
$(AR) -r $@ $^
file1.o: file1.c
$(CC) $(CFLAGS) -c $^ -o $@ $(LIBS) $(INCLUDES)
file2.o: file2.c
$(CC) $(CFLAGS) -c $^ -o $@ $(LIBS) $(INCLUDES)
install:
@echo Copying library files to $(DESTDIR)/$(LIBDIR):
@cp -rp libthreadpool.a $(DESTDIR)/$(LIBDIR)/
@echo Copying head files to $(DESTDIR)/$(DATADIR):
@cp -rp src/thread-pool.h $(DESTDIR)/$(INCLUDEDIR)/
clean:
rm -rf *.o \
*.a
uninstall:
rm -rf $(LIBDIR)/hello.a\
$(INCLUDEDIR)/hello.h
//////////////////////////////////////////////////////////////////////////

方法二
gcc -o hellofile.a file1.o file2.o -lc -lm -shared

动态库
gcc -o hellofile.so file1.o file2.o -lc -lm -shared
# -lpthread 线程
# -shared 共享库
# -lm 表示连接名为“libm.a”的数学函数库
# -lc 代表链接器将连接GCC的标准C库
# -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
# -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
# .a为后缀的文件,是由目标文件构成的档案库文件;
# .so 为动态库。本回答被提问者采纳

makefile 交叉编译怎么引用静态库

参考技术A 看你的mysql当前默认的存储引擎:
mysql>
show
variables
like
'%storage_engine%';
你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
mysql>
show
create
table
表名;

以上是关于怎么编写Makefile生成静态库的主要内容,如果未能解决你的问题,请参考以下文章

makefile -- 动态库、进程

Qt下如何编译库

Linux2.6 如何编写Makefile,使驱动程序能够编译链接静态库

编写一个第三方库(动态库和静态库)

android 怎么引用一个静态库

Makefile常用万能模板(包括静态链接库动态链接库可执行文件)