gpt4 book ai didi

c++ - 从链接中删除库模块

转载 作者:行者123 更新时间:2023-11-28 08:16:10 25 4
gpt4 key购买 nike

我已经在 Visual Studio 中制作了 lib。 Lib 有两个模块:A.cpp 和 B.cpp。在单独的项目中,我链接到这个库,但我想禁用这个库的模块之一,即 B.cpp。

最佳答案

您可能不必拆分您的库。

只有当您的可执行文件 (exe/dll) 中存在未解析的符号时,才会链接必要的 lib 内容。不需要的内容一般不链接进去。

例如:

假设您的库包含 2 个 obj 文件,a.obj 来自 a.cppb.obj 来自 b。 cpp.

a.cpp 包含调用函数 void b( int j ) 的函数 void a( int i )

b.cpp 包含函数 void b( int j )

假设您的可执行文件在其源文件之一中包含函数的实现

void b( int k )

在其他一些代码中,您调用了 void a( int )

当您链接库时,链接器在某个阶段留下 1 个未解析的符号(调用函数 void a( int ) 的符号)。它将搜索您指定的库这种函数签名的第一次出现,它链接在该库的那部分。由于您的可执行代码已经包含 void b( int ) 的实现,因此它不需要搜索任何库来解析 a.obj 中对它的调用,所以 < strong>b.obj 不会被链接进来。

总结(非常简单):

只要您不直接或间接调用\使用 b.obj 中的任何内容,它就不会被链接(除非您在链接 cmd 中将一个库指定为 OBJ=YourLib.lib,这会拉入总数库)。

如果你直接或间接地调用\使用 b.obj 中实现的东西,并且你在你的可执行文件中实现了这些符号(函数或全局变量),那么 b.obj 的那些部分将不会被链接(在函数的情况下) -level linking specified) 或者如果你忘记了什么,你会得到重复的符号链接(symbolic link)错误。

关于c++ - 从链接中删除库模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7731002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com