2011-01-19 106 views
4

目前我有类似下面的C++避免库链接

class FlowController 
{ 
    public: 
    //... 
    private: 
     cntrl::OneWayValve _intake; 
} 

一个C++设置正如你可以看到我用我的类中的一个CNTRL :: OneWayValve实例。 Valve类驻留在另一个库中,我在编译时链接它。 cntrl :: OneWayValve在它的实现中有一个cntrl :: Value,如下所示。

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

而作为CNTRL前::阀门驻留在不同库,你要问有关以前开发商的原因。

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

我的问题: 是否有可能只在编译时与cntrl :: OneWayValve库链接?

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

基本上我不想知道它在内部使用cntrl :: Valve,它与我的业务无关。

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

干杯, 本

+0

编译和链接在不同的操作系统上有所不同。你用什么? – tauran 2011-01-19 12:35:21

回答

1

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

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

0

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

+0

你怎么知道OneWayValve设计不是很好?我只看到点和一个私人成员。 – 2011-01-19 12:43:51

+0

@VJo私人会员是不好的设计理由。 – 2011-01-19 12:46:16

+0

@Let_Me_Be为什么?我同意使用pimpl习语更好,但私人会员没有任何问题。 – 2011-01-19 12:47:41

0

您可以通过在其标题中定义OneWayValve和Valve的所有方法为内联。那么你不需要链接到图书馆。

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