链接共享库的依赖关系

时间:2011-09-22 00:08:19

标签: c++ shared-libraries

我正在使用SFML,我编译了一个小测试程序并添加了链接选项-lsfml-audio。然后,我使用ldd ./program来查看它链接到的动态库。令人惊讶的是,有很多,我没有在makefile中手动选择,也没有使用pkg-config --libs

我开始阅读有关共享库的内容,并举一个例子来解决我的疑惑。但是,我有这个问题:

  

为什么有些库需要您在makefile中添加依赖项   (手动或使用像pkg-config这样的脚本)和其他   库自动链接它们的依赖项?

当您创建动态库时,就像在-ldependency命令中添加正确的g++ -shared ...选项一样简单,以避免用户稍后手动添加依赖项的麻烦。为什么许多可用的库不这样做?

我想它必须与微调哪些库链接等的能力有关。

1 个答案:

答案 0 :(得分:6)

共享库通常会链接其依赖项。但是,静态库无法执行此操作。 pkg-config --libs通常包含所有依赖项(直接和间接),因此您只需添加-static即可切换到静态编译,而无需添加其他库依赖项。

请注意,在某些情况下,这些过多的直接依赖关系被认为是不受欢迎的(例如,debian试图在打包的二进制文件中避免它们,因为它们使库soname转换比必要的更具创伤性)。您可以指示链接器从-Wl,--as-needed标志所需的最终可执行文件中删除直接依赖项。

相关问题