linux 静态库,makefile

转载 2016年05月30日 22:44:49

mkdir testlib,组织文件目录如下

my_math.h

int add(int a, int b);

int subtract(int a, int b);

my_math.c

#include "../include/my_math.h"

int add(int a, int b)
{
	    return a + b;
}

int subtract(int a, int b)
{
	    return a - b;
}

my_print.h

#include <stdio.h>

void cout(const char * message);
my_print.c

#include "../include/my_print.h" 

void cout(const char * message)
{
	    fprintf(stdout, "%s\n", message);
}

mylib.h

#ifndef __MY_LIB_H__
#define __MY_LIB_H__

int add(int a, int b);
int subtract(int a, int b);

void cout(const char *);
#endif

有以上文件 生成 libmylib.a

编写测试文件test.c,引用libmylib.a

test.c

#include <stdio.h>
#include "my_lib.h"

int main(void)
{
	int c = add(15, -21);
	cout("I am a func from mylib ...");
	printf("%d\n",c);
	return 0;
}

makefile

# 静态库的使用
# 
# make build 生成 libmylib.a
# make test 生成a.out可执行文件
# make clean 清除相关文件
#
.PHONY: build test clean

CC=gcc
OBJ_DIR=./obj
LIB_DIR=./lib
HEADERS=-I./include
DEBUG=-g -ggdb
WALL=-Wall -W
CFLAGS=$(WALL) $(DEBUG)
LIB_CC=$(CC) $(CFLAGS) $(HEADERS)

LIB_OBJ = $(addprefix $(OBJ_DIR)/, my_math.o my_print.o)

# 目录的判断与创建
prepare:
	@-if [ ! -d $(OBJ_DIR)  ];then mkdir $(OBJ_DIR); fi 
	@-if [ ! -d $(LIB_DIR)  ];then mkdir $(LIB_DIR); fi 

build:prepare $(LIB_DIR)/libmylib.a

# 使用ar链接生成静态库
$(LIB_DIR)/libmylib.a:$(LIB_OBJ)
	ar -crv $@ $^

$(OBJ_DIR)/%.o:src/%.c
	$(LIB_CC) -c $< -o $@

# 使用静态库
test:a.out

a.out:test.c
	$(LIB_CC) test.c -L$(LIB_DIR) -lmylib

clean:
	rm -rf $(OBJ_DIR)
	rm $(LIB_DIR)/libmylib.a
	rm a.out

makefile相关命令:

makefile中的.PHONY: http://blog.163.com/yangfan876@126/blog/static/80612456201371255834418/

makefile中的 $^ , $@, $<作用:http://blog.csdn.net/laogaoav/article/details/8520258

linux ar命令 静态库:http://blog.csdn.net/xuhongning/article/details/6365200


执行相应的make命令后





参考

linux 静态库生成 http://www.cnblogs.com/jiqingwu/p/4325382.html

Linux 动态库与静态库制作及使用详解:http://blog.csdn.net/mr_chenping/article/details/23823825


linux编译动态库和静态库的makefile示例

根据GenDll.cpp文件,分别生成动态库.so和静态库.a文件,需要依赖的外部库为opencv。1. 静态库的生成makefile命令的简介可参考:跟我一起写 Makefile。使用ar命令生成....
  • shaoxiaohu1
  • shaoxiaohu1
  • 2015年07月18日 16:07
  • 28833

Linux下Makefile中动态链接库和静态链接库的生成与调用

背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译、链接、生成可执行文件,从而实现了移植的过程。平台是Toradex的...
  • u011964923
  • u011964923
  • 2017年06月15日 20:14
  • 4879

Makefile 连接静态库注意事项

Linux的静态库是以.a结尾的,要连接静态库有两种方法,一种是在编译命令最后直接加上库路径/库名称。例如你的库在绝对目录/lib/libtest.a下面 你就可以这样来编译 $(CC) $(CF...
  • Blaider
  • Blaider
  • 2014年09月18日 13:18
  • 6946

用makefile编译生成.a文件(linux静态库),并编译进可执行文件中

文件列表: 代码文件/* 下列代码保存到 plus.cpp */int my_plus(int x,int y) { return x + y; } /* 下列代码保存到 m...
  • aflyeaglenku
  • aflyeaglenku
  • 2015年08月19日 14:15
  • 9050

makefile 生成/使用静态库

// puls.h int my_puls(int x,int y);   // puls.cc int my_puls(int x,int y) { return x + y; }   //...
  • yuyunliuhen
  • yuyunliuhen
  • 2011年12月01日 14:22
  • 17490

makefile静态库 动态库

动态库调用另外一个静态库: CC=$(CROSS_COMPILE)gcc LD=$(CROSS_COMPILE)ld CFLAGS:=-fPIC LDFLAGS:=-shared -fpic SO...
  • najiutan
  • najiutan
  • 2016年01月19日 20:01
  • 1995

makefile 强制使用静态链接库

方法1-static : 所有的库文件使用静态库链接g++ -static -ltest -lfoo 方法 2:这里有2个命令介绍一下:–Bdynamic : 用于在各种可能的情况下为共享动态绑定设...
  • xiexievv
  • xiexievv
  • 2017年02月23日 15:11
  • 2075

linux下动态库和静态库的制作、寻找、比较及相关Makefile的编写

一.库的定义 什么是库,在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二...
  • LYX_WIN
  • LYX_WIN
  • 2016年08月13日 23:41
  • 749

linux动态库及静态库的制作 和makefile 的简单编写

一.库 什么是库,简单的可以说是可执行代码的二进制形式,能够被操作系统载入内存执行。操作系统的不同,二者的库也是不兼容的,如windows与linux. 库又分为静态库和动态库,动态库又称为共享库...
  • hongfuhaocomon
  • hongfuhaocomon
  • 2016年05月28日 09:20
  • 4073

Makefile中patsubst函数使用方法

Makefile中patsubst函数使用方法
  • yanlaifan
  • yanlaifan
  • 2017年05月08日 08:42
  • 333
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux 静态库,makefile
举报原因:
原因补充:

(最多只允许输入30个字)