c++ - 循环链接库

标签 c++ linker static-linking

我们有一个应用程序,其中的代码组织在几个库中,其中一些库依赖于其他库,因此我们有一个依赖树,如

App
 |
 +--------+--------+
 |        |        |
 v        v        v
lib1     lib2     lib3
 |        |
 v        v
lib3     lib3

最近有人在 lib3 中添加了一个新方法,它依赖于 lib2 中定义的类,并且由于它会生成循环包含,我们在 lib3 中的头文件中对所需的类进行了前向声明。

现在,每个库都被编译成一个静态库,然后链接到它各自的链接列表,所以 lib2 在 lib2 的链接列表中,lib3 在 lib2 的链接列表中。

到目前为止,这工作得很好,但我想知道与具有这种编译和链接依赖关系相关的缺点。我认为 lib2 中的更改可能不会被 lib3 注意到,除非它被重新编译,但我检查过,lib2 中任何头文件的任何更改都会触发 lib3 的重新编译(这里有点运气)。

还有其他我应该注意的重要缺点吗?

最佳答案

Is there any other important drawback I should be aware of??

嗯,order of libraries指定用于链接实际上很重要。

为了摆脱链接器用来解决这些依赖关系的顺序,通常会提供一个选项来对它们进行分组,就像这些只是使用一个 .obj/ 池.o 文件。

对于 GCC 编译器,这些选项是 -Wl,--start-group,-Wl,--end-group .

关于c++ - 循环链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531818/

相关文章:

c++ - 有什么方法可以处理从 c++ 中调用的 c# exe 抛出的异常?

c++ - 在 union 中访问结构

visual-studio-2008 - 使用 Visual Studio 2010,如何链接到 Visual Studio 2008 生成的 DLL

c++ - 如何编译和链接 cddlib 库?

javascript - 如何处理两个单独文件中的异步?

c++ - 使用 g++ 编译并将 GraphicsMagick++ 作为静态库

c++ - Windows7中的硬件加速缩放MFT

c++ - C/C++ 从 x86 代码返回

c++ - 将CMake构建的库链接到预构建的目标文件

c - 使用 MinGW : Undefined reference to '_imp__glewExperimental.' 的 GLEW 问题