我在Visual Studio中创建了lib。 Lib有两个模块:A.cpp和B.cpp。 在单独的项目中,我链接到这个库,但我想禁用此lib的模块之一,即B.cpp。从链接中删除库的模块
0
A
回答
1
你可能不需要拆分你的lib。
只有当您的可执行文件(exe/dll)还有未解析的符号时,才会链接lib的必需内容。 不必要的内容一般地讲不挂
例如:
假设你的lib目录包含有2 OBJ-文件,A.OBJ从a.cpp和B.OBJ从b .cpp。等等
a.cpp包含调用函数void b(int j).
b.cpp包含函数void b(int j)
功能void a(int i)
。
并假设你的可执行文件中的源文件,一个包含一个函数
void b(int k)
的执行情况和其他一些一段代码,你必须void a(int)
通话。
当您链接到lib时,链接器在一个阶段留下1个未解析的符号(即调用函数void a(int)
)。它将搜索您为第一次出现此类函数签名而指定的库,以及因为你的可执行代码已经包含执行void b(int)
它不需要搜索任何库来解决它在a.obj中的调用,所以b.obj不会被链接。
总结(非常简化):
只要你不直接或间接地调用\使用b.obj中的任何东西,它将不会被链接(除非在链接cmd中指定一个lib为OBJ = YourLib.lib,这会引入整个库)。
如果您直接或间接调用b.obj中实现的东西,并在可执行文件中实现这些符号(函数或全局变量),那么b.obj的这些部分将不会链接到功能级链接指定),否则如果您忘记了某些内容,将会出现重复的符号链接错误。
0
将项目拆分为两部分,其中一部分包含A.cpp
,另一部分包含B.cpp
。然后,如果您需要链接到两个.cpp
文件,则必须链接到两个.lib
文件。但是如果你想链接到一个,那么你可以这样做。
相关问题
- 1. 从drupal7数据库中删除模块
- 2. 从libxml2中删除模块
- 3. 删除?从链接
- 4. 从GPS链接到Ubuntu .a模块库?
- 5. 如何从Wordpress中的所有图库中删除链接?
- 6. 从html中删除特定的链接?
- 7. 从链接删除mysql行
- 8. 删除前端从链接
- 9. 删除链接列表中的链接
- 10. 在.Doc中删除模板链接
- 11. 如何从HTML块中删除链接及其文本?
- 12. 如何从我的github存储库中删除子模块?
- 13. 如何从Orchard数据库中删除模块的数据?
- 14. 链接块有:方法=>:删除
- 15. DotNetNuke中的链接模块
- 16. 如何从MySQL数据库中删除两个链接的行?
- 17. php从mysql数据库中删除链接的行
- 18. 链接内核模块的静态库
- 19. 模块友好的网址,如何从url中删除模块?
- 20. 从子堆栈中删除Perl模块
- 21. McAfee从VBA模块中删除代码
- 22. 如何从CPAN中删除模块?
- 23. 如何从.gitmodules中删除子模块
- 24. 从文章中删除“prev”链接
- 25. 从链接列表中删除节点
- 26. Symfony 2从链接中删除app.php
- 27. 从ASP.NET项目中删除链接
- 28. 从链接列表中删除节点
- 29. 从链接列表中删除元素
- 30. 从链接中删除字符串href
这个问题有点难以遵循。如果将'A.cpp'和'B.cpp'编译为一个静态库,则不仅可以链接该库的一部分。如果是这样的话,你需要实现两个静态库,每个模块一个。 – Chad