通过静态库进行条件链接

时间:2013-05-20 12:00:57

标签: c++ linker g++ static-libraries clang++

我正在用C ++编写一个大的静态库。在该库中,我使用来自大量静态和动态库的符号。当我“制作”它时,我不需要链接任何libs,因为它是静态的。这是我的问题:我的静态库是非常泛型。它为同一个接口提供了几种实现(你可以看到像 drivers 这样的实现; libA提供了自己的实现,libB提供了它等等)。这些实现不打算一起使用,因为其中一些是依赖于平台的。

链接到我的lib时会出现问题。客户端必须链接我的lib使用符号的所有lib,即使客户端的代码不依赖于lib的任何符号。例如,如果客户端的代码仅依赖于 libA ,他仍然必须链接 libB ,因为我的静态库有一些来自 libB 的符号。

您是否知道一种排除此类行为的方法,并且只链接实际使用的库,在客户端代码中推断出符号?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可能会动态地将lib与其他lib链接起来。尝试链接这些论文的静态版本。

答案 1 :(得分:0)

如果我理解正确,您的库正在尝试使用客户端代码预期为defined的符号。如果客户端的代码没有not link,您希望链接器certain symbols库中的某些部分。是吗?

如果符合您的要求,请考虑http://en.wikipedia.org/wiki/Weak_symbol。我不确定您使用的是哪个工具链,但如果支持弱符号是实现条件链接的一种更好的方法。

相关问题