我正在用C ++编写一个大的静态库。在该库中,我使用来自大量静态和动态库的符号。当我“制作”它时,我不需要链接任何libs,因为它是静态的。这是我的问题:我的静态库是非常泛型。它为同一个接口提供了几种实现(你可以看到像 drivers 这样的实现; libA提供了自己的实现,libB提供了它等等)。这些实现不打算一起使用,因为其中一些是依赖于平台的。
链接到我的lib时会出现问题。客户端必须链接我的lib使用符号的所有lib,即使客户端的代码不依赖于lib的任何符号。例如,如果客户端的代码仅依赖于 libA ,他仍然必须链接 libB ,因为我的静态库有一些来自 libB 的符号。
您是否知道一种排除此类行为的方法,并且只链接实际使用的库,在客户端代码中推断出符号?
谢谢。
答案 0 :(得分:0)
您可能会动态地将lib与其他lib链接起来。尝试链接这些论文的静态版本。
答案 1 :(得分:0)
如果我理解正确,您的库正在尝试使用客户端代码预期为defined
的符号。如果客户端的代码没有not link
,您希望链接器certain symbols
库中的某些部分。是吗?
如果符合您的要求,请考虑http://en.wikipedia.org/wiki/Weak_symbol。我不确定您使用的是哪个工具链,但如果支持弱符号是实现条件链接的一种更好的方法。