2012-06-09 33 views
2

我正在Visual Studio 2010中使用C++。我試圖構建客戶端和服務器架構,其中客戶端和服務器都依賴於相同的'引擎'Visual Studio 2010 C++ - 如何打包.lib文件以供重用

下面是一個圖,它說明這一點:

image http://img266.imageshack.us/img266/5573/dependencies.png

其中:

引擎 - 應用特定的引擎

BaseEngine - (其他應用程序使用)的非專用引擎

SomeLibrary - 即BaseEngine取決於

使用Visual Studio庫,我已經建立了相應的項目引用和'包含目錄'。

客戶能夠看到引擎方法和發動機能夠看到的BaseEngine方法。但問題是,當客戶端和/或服務器調用Engine上的方法時,我得到幾個鏈接錯誤(LNK1120,LNK2001)。

看來這是發生的,因爲引擎依賴於BaseEngine並且客戶端不具有對BaseEngine的依賴性。

所以我的問題是:

反正是有使發動機和BaseEngine項目可以包裹起來,使客戶端和服務器並不需要引用BaseEngine?

回答

2

現在的問題是:鏈接器錯誤是否與Engine.lib或BaseEngine.lib相關?
我假設你在BaseEngine.lib導出的函數中存在問題,並在客戶端/服務器中引用導致未解析的符號。
如果您的客戶機/服務器依賴於BaseEngine.lib導出的功能,但只能引用Engine.lib,則必須直接引用BaseEngine庫或使Engine.lib明確地轉發由BaseEngine.lib提供的這些功能。
Engine.lib確實取決於(和引用)BaseEngine.lib並不意味着BaseEngine.lib的功能被Engine.lib無縫地轉發。我想你正在絆倒這個假設。如果真的需要,鏈接器只包含從BaseEngine.lib到Engine.lib的功能。但是,除非明確這樣做,否則這些功能在進一步的依賴關係(您的案例中的客戶端/服務器)中都不可見。我建議你在Engine.lib中編寫一些封裝功能,以便從客戶端/服務器引用的BaseEngine.lib轉發功能。

+0

感謝您的回答。是的,我現在已經意識到了這個問題,但是我有興趣知道如何編寫這個包裝功能 – oom

+0

沒有一般的建議如何做到這一點。至少有那麼一點信息;-)。這取決於圖書館的架構。在最簡單的情況下,您只需爲每個希望轉發的函數(類?)編寫沉悶的包裝。問題是BaseEngine的功能如何以智能的方式集成在Engine中。我想這將成爲另一個普遍問題的話題。 – pag3faul7

相關問題