C ++避免库链接

时间:2011-01-19 12:30:35

标签: c++ class-library dynamic-linking static-linking

我目前有一个像以下

的c ++设置
class FlowController
{
   public:
    //...
   private:
       cntrl::OneWayValve _intake;
}

正如你所看到我在我的班级中使用cntrl :: OneWayValve实例。 Valve类驻留在另一个库中,我在编译时链接它。 cntrl :: OneWayValve在其实现中有一个cntrl :: Value,就像这样。

class OneWayValve
{
   public:
    //...
   private:
       cntrl::Valve _valve;
}

和以前一样,cntrl :: Valve驻留在不同的库中是出于原因,你必须向前一个开发人员询问。

现在当我编译我的FlowController类时,我需要链接OneWayValve库和cntrl :: Valve库。

我的问题: 是否可以在编译时仅与cntrl :: OneWayValve库链接?

前瞻声明?
静态库(真的不想这样做)? 另一种选择?

基本上我不想知道它在内部使用cntrl :: Valve,这不关我的事。

注意:道歉操作系统是Unix。

干杯, 本

3 个答案:

答案 0 :(得分:1)

您可以做的是使用名为librarian的工具将Valve库作为OneWayValve库的一部分。我不知道你正在使用什么操作系统/编译器,所以我将描述如何使用Visual Studio,因为这是我实际使用的唯一系统(除非你想要计算CP / M + LIB-80) : - )

如果为OneWayValve项目调出Tools | Options对话框并选择Configuration Properties | Librarian | Additional Dependencies,则可以在Additional Dependencies设置中添加对Valve库的引用。这将导致OneWayValve.lib包含它从Valve.lib引用的任何对象。

答案 1 :(得分:0)

不幸的是,OneWayValve设计得不是很好。您不仅需要链接到两个库,而且如果OneWayValve类发生更改,您还必须重新编译Valve库和代码。

答案 2 :(得分:0)

您可以通过将标题中的OneWayValve和Valve的所有方法定义为内联来实现。然后您不需要链接到库。

但如果它是这样设计的,那么链接到这个库的问题是什么?动态链接库没有错。