2013-04-14 34 views
14

這是重點。我有一個子項目(靜態庫)創建。圖書館編譯得很好。沒有錯誤。當我將該庫包含在項目中並從項目庫中導入標題時,庫無法編譯,因爲它找不到屬於它自己的路徑。靜態庫路徑惡夢來自地獄

在網絡上關於如何創建一個靜態庫並將其嵌入到項目中的一堆教程之後,我不知道哪一個是正確的,因爲我嘗試了所有和所有失敗,並且一些不同。

這是庫的設置方式:


靜態庫

生成設置:

  1. 公共報頭文件夾路徑= $(BUILT_PRODUCTS_DIR)
  2. 頭搜索路徑= $(SRCROOT)(遞歸)

構建階段

複製文件= 1個文件,myLibrary.h,基本上是空的(當我使用的靜態庫模板以啓動庫通過xcode的創建。

沒有ADD COPY HEADERS


MAIN PROJECT

構建設置

  1. 頭搜索路徑=空
  2. 用戶頭搜索路徑= $(BUILT_PRODUCTS_DIR)(遞歸)
  3. 始終搜索用戶路徑= YES

構建階段

  1. 是,myLibrary.a是目標相關

什麼令我驚奇的是,在圖書館編譯好,但是當把它放在一個項目中時,無法找到屬於自己的庫的頭。

注意:我也試圖在庫上公開所有.h庫上創建副本標題階段,但它也失敗了。

這是一個錯誤的例子:

/Users/mike/Library/Developer/Xcode/DerivedData/MyApp-dnaimaovscreasadhmvgttwjnabc/Build/Products/Debug-iphoneos/include/myLibrary/ccTypes.h:39:9: 
fatal error: 'Platforms/CCGL.h' file not found 
#import "Platforms/CCGL.h" 

我已經失去了兩個幾天的時間來解決這個噩夢。

有什麼想法?

我已上傳示例項目herehere

+0

添加'Run Script'構建階段,在失敗階段之前執行,檢查'顯示構建日誌中的環境變量',啓動在'Log Navigator'上建立並檢查路徑。 –

+0

和腳本是空的?只是?這樣做只顯示了日誌導航器上已經顯示的內容。 – SpaceDog

+0

我已經上傳了一個示例項目到這裏:https://mega.co.nz/#!mBQhiRQS!Mz0wRh9wdhbKsW_KxE5F8iL2Q11gocuHlAB0ibQOoDo 所以你可以看到我的意思。 – SpaceDog

回答

3

(沒有足夠的代表處發表評論...)

你嘗試具體包括在標題搜索路徑的平臺目錄?據推測,平臺位於源目錄中,而不是$(BUILT_PRODUCTS_DIR),因此可能無法在當前設置中進行搜索。

+0

您是否嘗試過我已上傳的示例項目?查看我的問題的最後一段。謝謝。 – SpaceDog

+0

@RubberDuck我相信他的想法和我的一樣:添加正確的標題搜索路徑。您也可以使用「Build Locations」設置來使libs和主要項目的構建文件位於相同的根產品目錄中。 –

+0

順便說一句,我試過你的答案,不幸的是它不適合我。我即將放棄在Xcode上構建靜態庫。對Xcode而言,蘋果是另一種恥辱。謝謝你的努力。 – SpaceDog

3

關於腳本來顯示你env中的變量,這裏就是我如何做到這一點(在新標籤中打開圖片以獲取更好的縮放):

  • 追加的虛擬shell腳本

enter image description here

  • 在Log導航儀處觀察其輸出

enter image description here

enter image description here

enter image description here


正如你所看到的,BUILT_PRODUCTS_DIR沒有從庫複製任何頭。無論是手動(強烈不推薦)把頭部有或添加到您知道標題必須是在該位置的搜索路徑:

enter image description here enter image description here

現在因爲有兩個頭cocos2d.hMyStaticLibrary.hcocos2d.h成功雖然它會有額外的依賴關係

路徑../MyStaticLibrary/build/$(BUILD_STYLE)-$(PLATFORM_NAME)也將(遞歸)具有庫的公共標題。

+0

謝謝。我會稍後再嘗試。順便說一句,蘋果一定是在與開發者開玩笑。 – SpaceDog

+0

@RubberDuck爲什麼,你是否遵循了developer.apple.com的任何指南,它不工作?我想這是因爲缺少來自cocos2d的文檔或任何你想使用的庫,Xcode的工作非常好。 –

+0

我不這麼認爲。 Xcode 4是一個廢話。它由於愚蠢的原因而崩潰了幾次,例如通過使用查找器刪除項目正在使用的圖像文件。是的,我遵循了Apple的指南以及網絡上其他站點的大約10個指南。問題不在於科科斯。 Xcode必須找到它在項目中導入的所有編譯任何路徑。這就像在文本編輯器上導入圖像,在那裏看到該圖像,將其插入文本,格式化所有內容,並且當您要打印文檔時,編輯器會告訴您圖像無法找到。 – SpaceDog

12

下載您的示例項目後,通過進行以下更改,我可以在幾分鐘內完成工作。

首先,你需要添加頁眉下的搜索路徑MyProject目標的生成設置的條目,從而使文件,如HelloWorldLayer.h,這#import "cocos2d.h",知道在哪裏可以找到該文件。

Header Search Paths,我進入../MyStaticLibrary/MyStaticLibrary/libs/**像顯示在下面的圖片:

enter image description here

這解決了預處理器無法找到從MyStaticLibrary必要的源文件的問題,爲MyProject項目,但編譯後,我得到了關於丟失符號的錯誤。我需要內置libMyStaticLibrary.a添加到Link Binary With Libraries步一樣顯示在下面的圖片:

enter image description here

之後,該項目編譯罰款。

0

請試試這個...

第一步:右擊「projectName.xcodeproj」(靜態庫)。選擇「獲取信息」,並複製從(常規 - >在哪裏)

第二步的完整路徑:爲主項目(目標和項目)粘貼'標題搜索路徑'的完整路徑