我想创建一个共享库libX.so,但是libX.so包含一个依赖于libY.a或libY.so的cpp。
那么,我是否必须在链接时添加与libY相关的-I -l来创建libX.so?
答案 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