目录:
1 手动建立静态库
2 静态库的使用
3 通过makefile文件建立静态库
1 手动建立静态库
将建立一个简单的静态库
-1: 将所需的源文件编译成目标文件
------ helpguy.h
#ifndef __helpguy_h__ #define __helpguy_h__ #include <stdlib.h> #include <stdio.h> #include <unistd.h> void err_msg(const char* errMsg, ...); #endif // __helpguy_h__
------ helpguy.cc
#include "helpguy.h" #include <stdarg.h> #include <errno.h> #include <string.h> void exit_msg(const char* errMsg, ...) { va_list ap; va_start(ap, errMsg); int errno_save = errno; char buf[1024]; vsnprintf(buf, sizeof(buf) - 1, errMsg, ap); if(errno_save != 0) { int len = strlen(buf); snprintf(buf + len, sizeof(buf) - len - 1, ": (%d) %s", errno_save, strerror(errno_save)); } strcat(buf, "\n"); // output fflush(stdout); fputs(buf, stderr); fflush(stderr); va_end(ap); exit(1); }
编译:
g++ -c helpguy.cc // 生成文件: helpguy.o
-2 将目标文件创建成静态库文件
一般静态库名称为libxxx.a,在使用时,在命令行末尾添加 -lxxx, 那么,编译就会查找
libxxx.a或者libxxx.so文件。
ar crs libhelpguy.a helpguy.o // 生成库文件:libhelpguy.a
2 静态库的使用
------ 测试文件 main.cc
#include "helpguy.h" #include <iostream> int main(int argc, char** argv) { std::cout << "Please enter positive integer: "; int value; std::cin >> value; if(value <= 0) exit_msg("need positive integer"); std::cout << "The value is: " << value << std::endl; std::cout << "OK" << std::endl; return 0; }
编译:
g++ -o main main.cc -L. -lhelpguy // 生成: main文件
./main
当你输入非整数的时候就会调用exit_msg
-L. 告诉编译器在当前目录洗"."寻找名为 libhelpguy.a或者libhelpguy.so库文件
3 通过makefile文件建立静态库
----- makefile
CFLAGS=-g -D__STDC_FORMAT_MACROS -Wall -Werror -I.
LIBS=-lrt -pthread
libhelpguy.a: helpguy.o
ar crs [email protected] $^
chmod u+x [email protected]
helpguy.o: helpguy.cc
g++ -o [email protected] -c $< $(CFLAGS)
clean:
rm -rf helpguy.o
输入make命令即可创建静态库文件:
make
g++ -o helpguy.o -c helpguy.cc -g -D__STDC_FORMAT_MACROS -Wall -Werror -I.
ar crs libhelpguy.a helpguy.o
chmod u+x libhelpguy.a
如果你有多个.o文件,可以在libhelpguy.a: 后边继续添加,然后模仿 helpguy.o添加
生成目标文件的命令。