草庐IT

c++ - 如何在没有硬编码的完整依赖路径的情况下构建共享库(.so)?

我需要构建两个3rd方共享库,因此它们的.so文件将被其他项目重用。但是,在构建这些库之一后,包含到另一个库的硬编码路径。此路径在其他机器上无效并导致链接器警告。如何防止完整路径嵌入到生成的.so文件中?详情:第一个库源:~/dev/A第二个库源:~/dev/B它们都有configure脚本来生成make文件。库B依赖于A。所以,首先我构建A:$~/dev/A/configure--prefix=~/dev/A-install$make&&makeinstall然后我构建B:$~/dev/B/configure--prefix=~/dev/B-install--with-A=~/dev

c++ - LNK1201 Visual C++ 2010 大型项目无法生成 PDB

我们已经完成了MSDN中列出的要点WRT对此错误(#5除外)。不同机器上的三个不同的人遇到了同样的问题。PDB已创建,但在中间某处失败。详情:67个静态库4.27GB的静态库1048575字节-链接器失败时PDB的大小PDB的最后几兆字节为空(零)发布构建成功并生成一个PDB(我们已打开它,exe中没有调试信息)发布版本PDB不到1GB。我们已禁用病毒扫描程序。用procmon.exe观察,当链接器失败时,没有发现与PDB的可疑交互。Relatedquestion建议对PDB进行约1GB的限制-任何人/方式来确认?更新和解决方案:@Barry和Chromium团队提出了解决方案。Her

c++ - LNK1201 Visual C++ 2010 大型项目无法生成 PDB

我们已经完成了MSDN中列出的要点WRT对此错误(#5除外)。不同机器上的三个不同的人遇到了同样的问题。PDB已创建,但在中间某处失败。详情:67个静态库4.27GB的静态库1048575字节-链接器失败时PDB的大小PDB的最后几兆字节为空(零)发布构建成功并生成一个PDB(我们已打开它,exe中没有调试信息)发布版本PDB不到1GB。我们已禁用病毒扫描程序。用procmon.exe观察,当链接器失败时,没有发现与PDB的可疑交互。Relatedquestion建议对PDB进行约1GB的限制-任何人/方式来确认?更新和解决方案:@Barry和Chromium团队提出了解决方案。Her

c++ - 静态库如何链接到依赖项?

假设我有libA。例如,它依赖于libSomething,因为libA的非内联方法调用libSomething.h中的方法这一简单事实。在这种情况下,依赖关系如何联系起来?libA在编译时是否必须静态链接到libSomething,或者libA的用户(使用libA的应用程序)是否需要同时链接到libA和libSomething?谢谢 最佳答案 静态链接只是将整个项目(函数、常量等)复制到生成的可执行文件中。如果静态库的代码包含对某些共享库项的引用,这些引用将成为生成的可执行文件中的依赖项。如果您链接库而不是可执行文件,则同样如此。T

c++ - 静态库如何链接到依赖项?

假设我有libA。例如,它依赖于libSomething,因为libA的非内联方法调用libSomething.h中的方法这一简单事实。在这种情况下,依赖关系如何联系起来?libA在编译时是否必须静态链接到libSomething,或者libA的用户(使用libA的应用程序)是否需要同时链接到libA和libSomething?谢谢 最佳答案 静态链接只是将整个项目(函数、常量等)复制到生成的可执行文件中。如果静态库的代码包含对某些共享库项的引用,这些引用将成为生成的可执行文件中的依赖项。如果您链接库而不是可执行文件,则同样如此。T

c++ - 如何消除警告 LNK4221?

我正在使用c++/windows表单(visualstudio2010)开发一个项目,我们有4个项目:1个包含GUI窗口窗体的项目{托管代码},这是exe项目其他3个项目{非托管代码},都是静态库。在4个项目中,我们不使用预编译的头文件stdafx.h,公共(public)语言运行时支持是纯MSIL公共(public)语言运行时支持(/clr:pure)。每个项目都包含其他3个项目作为附加的包含目录,并将链接库依赖项设置为是。我们有:WarningLNK4221:Thisobjectfiledoesnotdefineanypreviouslyundefinedpublicsymbols

c++ - 如何消除警告 LNK4221?

我正在使用c++/windows表单(visualstudio2010)开发一个项目,我们有4个项目:1个包含GUI窗口窗体的项目{托管代码},这是exe项目其他3个项目{非托管代码},都是静态库。在4个项目中,我们不使用预编译的头文件stdafx.h,公共(public)语言运行时支持是纯MSIL公共(public)语言运行时支持(/clr:pure)。每个项目都包含其他3个项目作为附加的包含目录,并将链接库依赖项设置为是。我们有:WarningLNK4221:Thisobjectfiledoesnotdefineanypreviouslyundefinedpublicsymbols

c++ - 为什么链接器优化如此糟糕?

最近,一位同事向我指出,将所有内容编译到单个文件中创建的代码比编译单独的目标文件更有效-即使打开了链接时间优化。此外,该项目的总编译时间显着下降。鉴于使用C++的主要原因之一是代码效率,这让我感到惊讶。很明显,当归档器/链接器从目标文件中创建一个库,或者将它们链接到一个可执行文件中时,即使是简单的优化也会受到惩罚。在下面的示例中,当由链接器而不是编译器完成时,微不足道的内联会降低1.8%的性能。似乎编译器技术应该足够先进以处理这种相当常见的情况,但它并没有发生。这是一个使用VisualStudio2008的简单示例:#include#include#includeusingnamesp

c++ - 为什么链接器优化如此糟糕?

最近,一位同事向我指出,将所有内容编译到单个文件中创建的代码比编译单独的目标文件更有效-即使打开了链接时间优化。此外,该项目的总编译时间显着下降。鉴于使用C++的主要原因之一是代码效率,这让我感到惊讶。很明显,当归档器/链接器从目标文件中创建一个库,或者将它们链接到一个可执行文件中时,即使是简单的优化也会受到惩罚。在下面的示例中,当由链接器而不是编译器完成时,微不足道的内联会降低1.8%的性能。似乎编译器技术应该足够先进以处理这种相当常见的情况,但它并没有发生。这是一个使用VisualStudio2008的简单示例:#include#include#includeusingnamesp

c++ - 减少 c++ 链接时间的技巧

我有一个项目需要大约8秒来链接g++和ld。它使用了一堆静态库,大部分代码都是c++。我对有关如何减少链接时间的一般提示列表感兴趣。从“不包含调试符号”到“让你的代码少一些意大利面条” 最佳答案 我在以前的工作中处理了很多年。GNU链接器在链接大量静态库时存在严重的性能问题。在某一时刻,链接时间与编译时间相当,我们发现这很奇怪,我们实际上对此进行了调查并弄清楚了。您可以尝试在链接之前将您的静态库合并为“super对象”。而不是这样的链接:$g++-oprogramprogram.o$STATIC_LIBS你可以试试这个:$ld-r-