可以在C ++静态库链接到共享库?
-
12-09-2019 - |
题
说我有一个静态的C ++ LIB,static.lib和我想从一个C ++共享库调用一些功能,说shared.lib。这可能吗?
现在假设我有另一个共享库,说shared2.lib可链接到static.lib但不链接到shared.lib。是否链接器自动链接shared2.lib在这种情况下shared.lib?
我使用Microsoft Visual Studio 2003。
解决方案
静态库并未连结。他们只是一个目标文件的集合(* .OBJ或*的.o)被一起归档到一个库文件(有点像一个tar / zip文件),以方便链接器找到它需要的符号。
一个静态库可以调用未被定义(但仅在头文件中声明)的功能,因为它仅编译。然后,当你连接一个使用的静态库的EXE或DLL,你将有与提供从静态库被叫但它没有定义另一个库进行链接。
如果您想链接器能自动连接其他库斯蒂芬的建议将工作,并使用像升压和STLport的非常著名的图书馆。要做到这一点把编译主头文件为静态库。你应该包括静态库及其家属。
不过IMO此功能的真正含义为图书馆的作家,图书馆在系统库路径,以便链接器将很容易地找到它。此外,在升压和STLport的的情况下,他们使用该功能支持同一库的多个版本与在不同的选项需要不同版本的库被链接#define
s定义的选项。这意味着,用户不太可能配置升压单向和链路与被配置另一个库。
我给应用程序代码的偏好是显式链接所需的部件。
其他提示
链接器不会自动带来其他图书馆,但你可以使用的了#pragma评论(LIB“static.lib”)以简化通过将编译到您的头文件链接的附加文件的过程。
说我有一个静态的C ++ lib中, static.lib,我想打电话给一些 从C ++函数共享库,说 shared.lib。这可能吗?
是例如,当您从静态库中调用Windows函数它们通常是一些动态库,所以应该没有什么区别。
现在假设我已经另一个共享 LIB,说shared2.lib哪个环节 static.lib但不会链接 shared.lib。是否连接 自动链接到shared2.lib 在这种情况下shared.lib?
这样一个有依赖关系可以在以后会出现问题,我建议你,而不是使用动态的调用LoadLibrary(),这样你就不需要保持这种依赖的轨道在编译/链接。