【发布时间】:2018-05-30 18:35:44
【问题描述】:
我有一个包含 5 个项目的 Visual Studio 解决方案
- 主要:应用程序
- A、B、C、D:静态库
主要取决于 A,B。 A 取决于 C,D。
我对构建过程的理解很脆弱。
这些库单独构建得很好,尤其是 A;我不觉得我将 C 和 D 链接到 A。
为了构建 Main 应用程序,我必须将 A、B、C 和 D 作为输入库,尽管 Main 仅直接依赖于 A、B。
现在我正在尝试使用 CMake 在 Linux 上构建整个东西,但我发现自己再次接触到这些链接。这一次我不想使用蛮力,而是更愿意了解它是如何联系在一起的。
我应该将 A、B、C 和 D 构建为 .a 静态库并让 Main 包含它们吗?
如果没有 C 和 D 的符号,A 怎么可能构建?
【问题讨论】:
-
How is it possible for A to build without the symbols from C and D?- 静态库未链接,因此它们不需要定义来自其他库的符号。Should I just build A,B,C and D as .a static libraries and have the Main include them all?- 如果这行得通,你为什么需要寻找其他方法? -
对我来说,应用程序应该包含二级依赖关系是没有意义的。如果依赖关系更深,这将意味着我必须包含整个链。
-
您可能想要 SHARED 库 - 它们与其依赖项相关联,并将该链接存储在其中。
-
我从我的队友那里看到了一些代码,其中涉及到带有一些令人困惑的宏的附加标头:__declspec(dllexport/dllimport),我直到现在才理解。
标签: c++ linux windows build cmake