关键命令:
动态库制作命令
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!\n",name);
} //test.c
#include<stdio.h>
#include"hello.h"
int mian()
{
hello("csk");
return ;
}
一、将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 编译动态库
# 、准备工作,编译方式、目标文件名、依赖库路径的定义。
CC = gcc
CFLAGS := -Wall -O3 -std=c++0x OBJS = hello.o #.o文件与.cpp文件同名
LIB = libhello.so # 目标文件名
# . 生成.o文件
%.o : %.cpp
$(CC) $(CFLAGS) -fpic -c $< -o $@ # . 生成动态库文件
$(LIB) : $(OBJS)
rm -f $@
$(CC) -shared -o $@ $(OBJS)
rm -f $(OBJS) # . 删除中间过程生成的文件
clean:
rm -f $(OBJS) $(LIB)
使用Makefile 编译静态库
# 、准备工作,编译方式、目标文件名、依赖库路径的定义。
CC = gcc
CFLAGS := -Wall -O2 -std=c++0x OBJS = hello.o #.o文件与.cpp文件同名
LIB = libhello.a # 目标文件名 # . 生成.o文件
%.o : %.cpp
$(CC) $(CFLAGS) -c $< -o $@ # . 生成静态库文件
$(LIB) : $(OBJS)
rm -f $@
ar cr $@ $(OBJS)
rm -f $(OBJS) # . 删除中间过程生成的文件
clean:
rm -f $(OBJS)$(LIB)