Linux下制作静(动)态库

关键命令:

动态库制作命令

gcc xxx.c -fPIC -shared -o libxxx.so

静态库制作命令

gcc -c xxx.c

ar crv libxxx.a xxx.o

例:

//hello.h
#ifndef HELLO_H
#define HELLO_H
void hello(const char * name);
#endif



//hello.c
#include<stdio.h>
void hello(const char * name)
{
  printf("hello %s!
",name);
}

//test.c
#include<stdio.h>
#include"hello.h"
int mian()
{
 hello("csk");
 return 0;
}

一、将hello.c 编译成静态库

gcc -c hello.c //生成hello.o文件

ar -rcv libhello.a hello.o //生成静态库

gcc -o hello test.c -L. -lhello //链接静态库将test.c文件编译生成可执行文件hello

./hello //执行

二、将hello.c编译生成动态库

gcc hello.c -fPIC -shared -o libhello.so //生成动态库

gcc -o hello test.c -L. -lhello //链接动态库将test.c文件编译生成可执行文件hello

export LD_LIBRARY_PATH=$(pwd) 或者ldconfig "目录名" (当前文件所在的目录)

./hello //执行

使用Makefile 编译动态库

# 1、准备工作,编译方式、目标文件名、依赖库路径的定义。
CC = gcc
CFLAGS  := -Wall -O3 -std=c++0x 

OBJS = hello.o #.o文件与.cpp文件同名
LIB = libhello.so # 目标文件名 
# 2. 生成.o文件 
%.o : %.cpp
    $(CC) $(CFLAGS) -fpic -c $< -o $@ 

# 3. 生成动态库文件
$(LIB) : $(OBJS)
    rm -f $@
    $(CC) -shared -o $@ $(OBJS)
    rm -f $(OBJS)

# 4. 删除中间过程生成的文件 
clean:
    rm -f $(OBJS) $(LIB)

使用Makefile 编译静态库

# 1、准备工作,编译方式、目标文件名、依赖库路径的定义。
CC = gcc
CFLAGS  := -Wall -O2 -std=c++0x 

 

OBJS = hello.o #.o文件与.cpp文件同名
LIB = libhello.a # 目标文件名 


# 2. 生成.o文件 
%.o : %.cpp
    $(CC) $(CFLAGS) -c $< -o $@ 

# 3. 生成静态库文件
$(LIB) : $(OBJS)
    rm -f $@
    ar cr $@ $(OBJS)
    rm -f $(OBJS)

# 4. 删除中间过程生成的文件 
clean:
    rm -f $(OBJS)$(LIB)
海阔凭鱼跃,天高任鸟飞。
原文地址:https://www.cnblogs.com/chenshikun/p/6093712.html