C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 链接时图书馆依赖性如何发挥作用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个库libmya.so一个库libmyb.so. libmyb.so中的函数依赖于libmya.so中的函数.我还有一个可执行的myexe,它取决于libmyb.so.当我创建这些库时,我应该在哪些规则中放置-l选项?

应该是1):

libmya.so: $(OBJ_FILES)
    $(CPp) $(LDFLAGS) -o $@ $^

libmyb.so: $(OBJ_FILES)
    $(CPp) $(LDFLAGS) $(LIBS) -o $@ $^ -lmya

myexe: $(OBJ_FILES)
    $(CPp) $(LDFLAGS) $(LIBS) -o $@ $^ -lmyb

或2)

libmya.so: $(OBJ_FILES)
    $(CPp) $(LDFLAGS) -o $@ $^

libmyb.so: $(OBJ_FILES)
    $(CPp) $(LDFLAGS) $(LIBS) -o $@ $^

myexe: $(OBJ_FILES)
    $(CPp) $(LDFLAGS) $(LIBS) -o $@ $^ -lmya -lmyb

还是其他一些组合?

解决方法

我会选择选项1(然选项2有效,但我不推荐它,因为任何链接exe的人都需要记住所需的所有传递库).

但是,这个建议仅用于制作一个so文件,就像你上面做的那样.所以文件(共享对象)是“智能”库,很像可执行文件,除了它们没有main.所以文件可以链接到其他库(如可执行文件),当可执行文件链接到so文件时,它会自动递归地包含so文件的依赖项.

因此,您创建的so文件应与其所有依赖项链接.

“哑”库,例如文件(静态库)是一个不同的故事;那么你需要在可执行文件中进行所有链接(选项2).

我建议你使用ldd工具来调查可执行文件和so文件的依赖关系,看看它是如何工作的.

有关为什么选项1更好的实际示例,请尝试使用ldd /usr/lib/libpng.so.请注意,libpng与libz链接.如果不是,那么任何与libpng链接的人都需要链接libz.实际上,您可以在不知道涉及libz的情况下链接libpng.

大佬总结

以上是大佬教程为你收集整理的c – 链接时图书馆依赖性如何发挥作用?全部内容,希望文章能够帮你解决c – 链接时图书馆依赖性如何发挥作用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。