linux下静态库编译使用复杂版
2016-02-28 10:54
531 查看
通常情况下,由于主函数文件main.cpp要调用多个头文件,所以编译时比较复杂,比如需要使用类似makefile文件,那么,此时的想法是将其他算法函数生成到一个静态库文件,引用该库文件头即可
代码:
add.cpp
add.h
sub.cpp
sub.h
----------main源文件----------
普通情况下,编译:
gcc main.cpp add.cpp sub.cpp -o main
./main
输出:
5
-1
使用静态库方法编译:
(1)首先生成*.o文件
将 add.cpp 和sub.cpp 编译生成 .o文件
gcc -c add.cpp
gcc -c sub.cpp
生成的文件:sub.o ,add.o
(2)利用ar命令生成静态库,由 .o 文件创建静态库(.a 文件)
ar rc libmymath.a sub.o add.o
库文件的命名规范是以lib开头(前缀),紧接着是静态库名,以 .a 为后缀名。
(3) 在程序中使用静态库
gcc main.cpp -o main ./libmymath.a
(4)下面先生成目标程序main,然后运行main程序看看结果如何。
./main
输出:
5
-1
小结: 本例中文件由add.cpp add.h sub.cpp sub.h main.cpp构成,其中main.cpp需要引用头文件add.h sub.h
通过静态库的方法,将add.cpp add.h sub.cpp sub.h 构成库文件mymath.a(当然需要考虑库文件lib前缀)
此时主文件main.cpp不需要考虑头文件,只需要后缀将该静态库链接上即可
代码:
add.cpp
#include "add.h" int add(int a, int b) { return a + b; }
add.h
#ifndef _ADD_H #define _ADD_H int add(int a, int b); #endif----------
sub.cpp
#include "sub.h" int sub(int a, int b) { return a - b; }
sub.h
#ifndef _SUB_H #define _SUB_H int sub(int a, int b); #endif
----------main源文件----------
#include <stdio.h> #include "add.h" #include "sub.h" int main() { printf("%d\n", add(2, 3)); printf("%d\n", sub(2, 3)); return 1; }
普通情况下,编译:
gcc main.cpp add.cpp sub.cpp -o main
./main
输出:
5
-1
使用静态库方法编译:
(1)首先生成*.o文件
将 add.cpp 和sub.cpp 编译生成 .o文件
gcc -c add.cpp
gcc -c sub.cpp
生成的文件:sub.o ,add.o
(2)利用ar命令生成静态库,由 .o 文件创建静态库(.a 文件)
ar rc libmymath.a sub.o add.o
库文件的命名规范是以lib开头(前缀),紧接着是静态库名,以 .a 为后缀名。
(3) 在程序中使用静态库
gcc main.cpp -o main ./libmymath.a
(4)下面先生成目标程序main,然后运行main程序看看结果如何。
./main
输出:
5
-1
小结: 本例中文件由add.cpp add.h sub.cpp sub.h main.cpp构成,其中main.cpp需要引用头文件add.h sub.h
通过静态库的方法,将add.cpp add.h sub.cpp sub.h 构成库文件mymath.a(当然需要考虑库文件lib前缀)
此时主文件main.cpp不需要考虑头文件,只需要后缀将该静态库链接上即可
相关文章推荐
- 11款最棒的Linux数据恢复工具
- Android(Linux)线路规程的使用
- 监控 Linux 性能的 18 个命令行工具
- Linux中特殊字符
- cnetos6,centos7添加新网卡,系统不识别的解决办法
- linux内核中的likely和unlikely
- linux 命令 —— umask
- linux下简单编译与静态库编译使用
- centos7的网卡名修改为eth0
- Linux c 操作Mysql简单实例
- linux下使用yum安装mysql
- 关于Cygwin中编译FFmpeg时执行sh文件出现arm-linux-androideabi-gcc is unable to create an executable file.
- linux知识点:01
- 在VMware里面扩展Linux根目录文件系统的空间
- Linux(ubuntu)常用终端指令
- linux下文本读写:面向二进制字节流方式
- Linux 下安装配置JDK
- linux之ssh命令
- linux下常用svn命令
- Centos6.5使用yum安装svn