从链接中删除库模块
Remove module of library from linking
我在Visual Studio中制作了lib。Lib 有两个模块:A.cpp 和 B.cpp。在单独的项目中,我链接到这个库,但我想禁用这个库的一个模块,即 B.cpp。
您可能不必拆分您的库。
仅当可执行文件 (exe/dll( 中仍有未解析的符号时,才会链接 lib 的必要内容。不必要的内容通常说是不链接的。
例如:
假设您的库包含 2 个 obj 文件,来自 a.cpp a.obj 和来自 b.cpp的 b.obj。
a.cpp 包含调用函数void b( int j ).
的函数void a( int i )
b.cpp 包含函数 void b( int j )
。
假设您的可执行文件在其源文件之一中包含函数的实现
void b( int k )
在其他一些代码中,您可以调用void a( int )
.
当您针对 lib 进行链接时,链接器在一个阶段留下 1 个未解析的符号(调用函数的符号void a( int )
.它将搜索您为此类函数签名的第一次出现指定的库,并在该库的该部分中链接。由于您的可执行代码已经包含void b( int )
的实现,因此它不需要搜索任何库来解析 a.obj 中的调用,因此 b.obj 不会被链接。
总结(非常简化(:
只要你不直接或间接调用\使用b.obj中的任何内容,它就不会被链接(除非你在链接cmd中将库指定为OBJ=YourLib.lib,它会拉入总库(。
如果您直接或间接调用\使用 b.obj 中嵌入的内容,并在可执行文件中实现这些符号(函数或全局变量(,那么 b.obj 的这些部分将不会链接(在指定函数级链接的情况下(,或者如果您忘记了某些内容,您将收到重复的符号链接错误。
将项目一分为二,一个包含A.cpp
,另一个包含B.cpp
。然后,如果您需要链接到两个.cpp
文件,则必须链接到两个.lib
文件。但是,如果您只想链接到一个,那么您可以这样做。
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 尝试导入pybind-opencv模块时出现libgtk错误
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- Nodejs本机模块 - 如何删除调试符号
- 从链接中删除库模块