现有如下问题:
我们在第三方动态库(比如 boost 库)的基础上,开发了自己的动态库供公司内部项目使用。在使用自己的这个动态库的时候,该如何进行编译呢?即,依赖链条是这样的情况下:
程序–(依赖)–>libA.so–(依赖)–>libB.so
该如何进行编译。
为了研究这个问题,我们建立一个目录结构,写几个简单程序来模拟一下。以下内容将从构建动态库开始,一步步展示如何达成我们的目标。
建立试验目录结构、程序
目录结构
learn
|
|--main.cpp
|
|--upperLayer
| |--uLayer.h
| |--uLayer.cpp
|
|--bottomLayer
|--bLayer.h
|--bLayer.cpp
我们将在这个目录下,生成 libblayer.so, libulayer.so, main(可执行文件),其依赖链条是:
main–>libulayer.so–>libblayer.so
特别的,对于 main 的编译来说,其编译参数无需指定 libblayer.so,它只需关心自己直接依赖的 libulayer.so 即可(当然,由于 libulayer.so 依赖 libblayer.so,系统中必须安装 libblayer.so)。
程序
bottomLayer/bLayer.h
#ifndef B_LAYER_H
#define B_LAYER_H
int addOne(int n);
#endif
bottomLayer/bLayer.cpp
#include "bLayer.h"
int addOne(int n)
{
return n + 1;
}
upperLayer/uLayer.h
#ifndef U_LAYER_H
#define U_LAYER_H
int needAddOne(int n);
#endif
upperLayer/uLayer.cpp
#include "uLayer.h"
#include "../bottomLayer/bLayer.h"
int needAddOne(int n)
{
return addOne(n);
}
main.cpp
#include "upperLayer/uLayer.h"
#inc