我是否必须将依赖库添加到makefile中以在C ++中生成共享库?

时间:2014-01-13 16:35:51

标签: c++

我想创建一个共享库libX.so,但是libX.so包含一个依赖于libY.a或libY.so的cpp。

那么,我是否必须在链接时添加与libY相关的-I -l来创建libX.so?

2 个答案:

答案 0 :(得分:1)

这取决于。如果要从动态库中解析外部符号,则需要说明在链接库时-L/path/to/libY -llibY。此外,除非您是LD_LIBRARY_PATH的忠实粉丝,否则您可能想要-wl,-rpath=/path/to/libY和Goodle成为RUNPATH vs RPATH的主题。

答案 1 :(得分:1)

据我所知,如果您使用libY.so中的符号,那么与您的libX.so关联的任何人都必须与libY.so链接。

但是,如果libY是一个静态库,即:libY.a你有两个选项

选项1:

.so一样,您只需与libY.a相关联,用户可能需要与libY.a相关联。

选项2:

使用libY.a作为另一个目标文件,链接器将解包libY.so并为您进行链接。  使用此方法,无需知道您正在使用libY.a

g++ $(OBJS) /path/to/libY.a -o libX.so