您的位置:首页 > 运维架构 > Linux

linux下静态库编译使用复杂版

2016-02-28 10:54 531 查看
通常情况下,由于主函数文件main.cpp要调用多个头文件,所以编译时比较复杂,比如需要使用类似makefile文件,那么,此时的想法是将其他算法函数生成到一个静态库文件,引用该库文件头即可

代码:

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不需要考虑头文件,只需要后缀将该静态库链接上即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: