当前位置: 首页 > 知识库问答 >
问题:

C/C++编译器通常会删除重复的库吗?

梁兴修
2023-03-14

我正在编译一个静态(在阅读注释后添加了静态)C++库PoDoFo,它的一些依赖项是可选的,如libJPEG、libTiff和libpng。不过,许多库也可以相互依赖。例如,您可以通过使用libjpeg编译libTiff来启用libTiff中的JPEG支持。

在完美的情况下,我希望libTIFF能够通过实现对libJPEG的访问来启用libJPEG函数,因为我将它包含在Podofo的编译中。遗憾的是,我认为启用/禁用函数是在我第一次编译libtiff时决定的。

共有1个答案

百里芷阳
2023-03-14

基本上是的,它只包括一个副本。

您正在更改的编译开关实际上并不包括一个库到另一个库,它们只是启用了需要这些库的功能,例如,如果您启用了libJPEG支持,libTIFF可能包括在jpeg和tiff格式之间转换的函数,但如果您不想这样做,则允许您在没有该功能的情况下编译库的其余部分。

当您用PoDoFo链接一个最终的应用程序时,您还必须链接您启用的所有可选依赖项。对于动态库来说,这可以是自动的,但是依赖项在运行时都是必需的。

在几乎所有情况下,每个库只有一个副本与最终的应用程序链接--唯一的例外是如果您混合了静态库和动态库,但这是一个全新的蠕虫罐。

 类似资料:
  • 我想开始在c#中开发,但是我使用Linux和VSCode进行开发,由于一些错误,我找不到答案,VSCode不运行代码,所以我决定借助这个链接(在linux终端上运行C#代码)来制作一个bash脚本来完成这部分代码: 到目前为止,我是这样做的: 它确实可以工作,但是我想让2美元(第二个参数)自动以1美元(第一个参数)命名,因此我不需要写2美元的值,只需写1美元创建一个同名的exe并用mono运行该e

  • 我经常遇到这种情况。乍一看,我认为,“这是糟糕的编码;我正在执行一个方法两次,必然会得到相同的结果。”但想到这里,我不得不怀疑编译器是否像我一样聪明,并能得出相同的结论。 编译器的行为是否取决于 方法的内容?假设它看起来像这样(有点类似于我现在的真实代码): 除非对这些对象来自的任何存储进行处理不当的异步更改,否则如果连续运行两次,肯定会返回相同的内容。但是,如果它看起来像这样(为了论证而无意义的

  • 本文向大家介绍C++ 复制删除的目的,包括了C++ 复制删除的目的的使用技巧和注意事项,需要的朋友参考一下 示例 在标准中,有一些地方可以复制或移动对象以初始化对象。复制省略(有时称为返回值优化)是一种优化,通过该优化,在某些特定情况下,即使标准规定必须进行复制,也允许编译器避免复制或移动。 考虑以下功能: 根据标准的严格措辞,此函数将初始化一个临时std::string对象,然后将其复制/移动到

  • 本文向大家介绍C/C++ 编译器优化介绍,包括了C/C++ 编译器优化介绍的使用技巧和注意事项,需要的朋友参考一下 0. gcc -o gcc -o 的优化仍然是机械的,想当然的。只有做到深入理解计算机系统,加深对编程语言的理解,才能写出最优化的代码。 Linux下gcc 优化级别的介绍  · gcc -o0 ⇒ 不提供任何优化;  · gcc -o1 ⇒ 最基本的优化,主要对代码的分支、表达式、

  • 问题内容: Java编译器会优化简单的重复数学运算,例如: 我知道我可以将结果分配给if语句之前的变量,然后返回变量,但这有点麻烦。如果编译器自动识别出正在执行相同的计算,并将结果自己缓存到临时变量中,我宁愿遵守上述约定。 *编辑-我是个白痴。我试图简单/过多地提出我的问题。它不是简单的:if(x> y) 问题答案: 答案是肯定的。这称为“ 公共子表达式消除”,它是Java,C / C ++和其他