Linux 创建静态库以及静态库的使用

来源:互联网 发布:mt4画线软件 编辑:程序博客网 时间:2024/05/22 14:04
目录:

1 手动建立静态库
2 静态库的使用
3 通过makefile文件建立静态库


1 手动建立静态库
将建立一个简单的静态库

-1: 将所需的源文件编译成目标文件

------ helpguy.h

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #ifndef __helpguy_h__  
  2. #define __helpguy_h__  
  3.   
  4. #include <stdlib.h>  
  5. #include <stdio.h>  
  6. #include <unistd.h>  
  7.   
  8. void err_msg(const char* errMsg, ...);  
  9.   
  10. #endif // __helpguy_h__  

------ helpguy.cc

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #include "helpguy.h"  
  2.   
  3. #include <stdarg.h>  
  4.   
  5. #include <errno.h>  
  6. #include <string.h>  
  7.   
  8. void exit_msg(const char* errMsg, ...)  
  9. {  
  10.      va_list ap;  
  11.       
  12.      va_start(ap, errMsg);  
  13.   
  14.      int errno_save = errno;  
  15.      char buf[1024];  
  16.      vsnprintf(buf, sizeof(buf) - 1, errMsg, ap);  
  17.   
  18.      if(errno_save != 0)  
  19.      {  
  20.           int len = strlen(buf);  
  21.           snprintf(buf + len, sizeof(buf) - len - 1, ": (%d) %s",  
  22.                     errno_save, strerror(errno_save));  
  23.      }  
  24.   
  25.      strcat(buf, "\n");  
  26.   
  27.      // output  
  28.      fflush(stdout);  
  29.      fputs(buf, stderr);  
  30.      fflush(stderr);  
  31.   
  32.      va_end(ap);  
  33.   
  34.      exit(1);  
  35. }  


编译:

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

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #include "helpguy.h"  
  2.   
  3. #include <iostream>  
  4.   
  5. int main(int argc, char** argv)  
  6. {  
  7.      std::cout << "Please enter positive integer: ";  
  8.       
  9.      int value;  
  10.      std::cin >> value;  
  11.   
  12.      if(value <= 0)  
  13.           exit_msg("need positive integer");  
  14.   
  15.      std::cout << "The value is: " << value << std::endl;  
  16.      std::cout << "OK" << std::endl;  
  17.   
  18.      return 0;  
  19. }  



编译:

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 $@ $^
     chmod u+x $@

helpguy.o: helpguy.cc
     g++ -o $@ -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添加
生成目标文件的命令。
0 0
原创粉丝点击