关键命令:
动态库制作命令
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)