我想在Xcode(6.0.1)中使用兩個版本的靜態庫創建一個項目。因此,我創建了類似於這樣的目錄結構:Xcode:多個版本的靜態庫
+ include
|-- VersionA
|-- foo.h
|-- bar.h
|-- VersionB
|-- foo.h
|-- bar.h
+ lib
|-- VersionA
|-- foo.a
|-- bar.a
|-- VersionB
|-- foo.a
|-- bar.a
了foo.h和bar.h在兩個目錄是類似的標題,而可執行文件是不同的。爲了包括一定的頭,我(非遞歸)的添加包括目錄到搜索路徑中包含的是這樣的:
#include "VersionA/foo.h" // or this:
#include "VersionB/bar.h"
現在的問題是:如何Xcode中決定哪些Mach-O的脂肪(。 a)鏈接某個頭文件的文件?這項任務如何工作,我如何影響它?
編輯:
我沒有得到任何重複的符號鏈接錯誤,雖然看起來連接到這兩個lib目錄。由於頭文件有像下面這樣的警衛:
#ifndef FOO_H
#define FOO_H
...
我在重定義方面也沒有錯誤。如果我改變一個包括後衛即
的#ifndef FOO_H_VERSION1
有在編譯時錯誤(思邁特問題,「FOO_SOMETHING」的重新定義)。這對我來說很有意義,並指出複製頭文件可能不是最佳做法。
儘管如此,對於我的項目我需要兩個版本的靜態庫。什麼是實現這一目標的合理方法?
有趣的是,鏈接器不會抱怨重複的符號,儘管它明顯地鏈接了兩個庫目錄。但是 - 因爲頭文件有相同的內容 - 應該有重複的,對吧? – Simon 2014-10-07 09:10:09
好吧,你是對的,它很安靜,只能使用一個版本。謝謝! – Simon 2014-10-07 12:26:12
@Simon很喜歡它的作品。關於你的第一條評論,在大多數情況下,鏈接器不會在你的鏈接庫中查找函數,除非你實際使用了它們。如果您使用兩個庫版本之間沒有重複的獨立函數,則應該沒有問題。如果不是 - 這很奇怪 - 只是希望它能繼續工作! – ttarik 2014-10-07 13:17:06