2011-12-10 79 views
3

我試圖從Lion上的iOS Xcode 4.2(4D199)項目名爲CocoaTouchHax生成gcd文件,我遇到了令人難以置信的麻煩。我遵循了步驟here,並且盡力按照步驟here從源代碼構建llvm/clang。但我繼續得到這個錯誤:iOS上的代碼覆蓋率在Lion上使用Xcode 4.2

Library not loaded: @executable_path/../lib/libprofile_rt.dylib 

我在哪裏出錯了?我試圖使用install_name_tool來修復可執行文件路徑無濟於事。我是在分析一些東西嗎?我錯過了一些簡單的東西嗎我把這個看作是一個「運行腳本」相連接,以確保我已經更新了@executable路徑和我使用的工具來檢查後的文件之前和名字更新:

install_name_tool -id @executable_path/Users/cliff/dev/CocoaTouchHax/build/CocoaTouchHax/Build/Products/Debug-iphonesimulator/lib/libprofile_rt.dylib build/CocoaTouchHax/Build/Products/Debug-iphonesimulator/lib/libprofile_rt.dylib 

我在做什麼錯誤?幫幫我!

更新 僅僅添加的lib profile_rt.dylib崩潰我的試運行,立即給予任何時候運行以下錯誤: @executable_path /../的lib/libprofile_rt.dylib 所以我可以肯定,有什麼需要發生或者在執行之前需要對lib profile_rt.dylib執行一些操作。

另一個更新我試圖/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/Developer/usr 下創建和鏈接 /開發商/ usr/lib目錄 我相信這是測試運行時形成當前工作目錄的路徑的一部分。 (假設它從那裏的bin文件夾運行。)理論上,這將從該基本路徑完成../lib/libprofile_rt.dylib的相對查找路徑,但它不起作用。我試着運行install_name_tool命令複製到位dylib之前,但我仍然得到這個錯誤:

Library not loaded: @executable_path/../lib/libprofile_rt.dylib

我不知道我做錯了。我以某種方式設法使測試覆蓋率文件發出使用上述的一些組合,但我沒有足夠的關注和不能重現發生。我知道這可以工作,我只是需要更多的幫助來弄清楚如何。

回答

3

在Lion上,你可以符號鏈接dylib到/ usr/lib目錄,以避免錯誤

sudo ln -s /Developer/usr/lib/libprofile_rt.dylib /usr/lib/libprofile_rt.dylib

我不能保證這不會破滅的東西將來但是。記住你已經完成了。

創建一個名爲「Coverage」(或其他)的新配置。

在已創建的去蓋設置覆蓋率配置變種和...

  • 添加-fprofile-arcs-ftest-coverage其他C標誌
  • 接通Generate Test Coverage Files
  • 接通Instrument Program Flow
  • In 其他連接器標誌 add -lprofile_rt

使用配置這樣做的原因是您可以保持正常的構建不變。也只適用於模擬器。所以不要嘗試在設備上運行。

而且從http://mattrajca.com/post/8749868513/llvm-code-coverage-and-xcode-4

最後,開拓中間體/ $ TARGET.build/$ CONFIG/$ TARGET。build/Objects-normal/$ ARCH子文件夾。在裏面,你會發現前面提到的gcda和gcov文件

你可以用CoverStory打開該文件夾。

請注意,覆蓋不是累積的(不像Coverity),所以每次運行都重新開始。可能有辦法改變這種情況。

+0

謝謝!!!缺少的鏈接是來自/ usr/lib文件夾的符號鏈接!工作文件夾必須是「/ usr/bin」文件夾,這將解釋爲什麼我以前的嘗試到符號鏈接沒有工作我假設工作文件夾將是單元測試可執行文件的位置/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/Developer/usr。我現在看到我的報道文件!再次感謝!!! :) :) – Cliff

5

更新:的Xcode 4.3.2(4E2002),只需打開生成測試覆蓋文件儀器程序流程,構建系統將連接libprofile_rt爲您服務。 Xcode 4.3及更高版本是標準的Mac應用程序,/ Developer文件夾不見了。所以,跳過下面的步驟5-7。您還必須創建一個類文件來解決Apple的unix實現中的錯誤,如here所述。你會希望它在被測試的項目中。

對於的Xcode 4.2(4C199)雪豹:

  1. 創建一個項目,說myProduct的。檢查包括單元測試
  2. 一旦Xcode做它的事情並加載新的項目,你應該有兩個目標,MyProductMyProductTests。複製MyProduct目標。
  3. 選擇MyProduct複製目標。
  4. 轉至構建設置代碼生成打開生成測試覆蓋率文件儀器程序流程
  5. 轉到構建階段。展開帶庫的鏈接二進制文件。點擊+。點擊添加其他...。瀏覽至/ Developer/usr/lib。選擇libprofile_rt.dylib
  6. 選擇MyProductTests目標。
  7. 對該目標重複步驟4和5。
  8. 再次轉到構建設置。查找Bundle Loader under Linking。將路徑更改爲MyProduct副本應用程序。像$(BUILT_PRODUCTS_DIR)/ MyProduct copy.app/MyProduct副本。
  9. 更改您的方案,以便在MyProduct副本方案下運行測試,而不是MyProduct。如果你自己編譯clang,你可以在這裏找出細節。

這應該有效。第8步帶我小時弄清楚,這是關鍵。如果您只在測試版本目錄中看到gcda文件,那可能是問題所在。

+0

是的,我知道關於在模擬設備上運行。我有一個源代碼編譯的llvm/clang的問題,其中lib profile_rt.dylib僅支持x64體系結構。所以我恢復使用lib profile_rt.dylib,而不是使用Xcode。我的問題是2倍。是否需要從源代碼構建鏗鏘聲,還是Apple在最新的Xcode 4.2(4D199)中修復了這個問題?另外,libprofile_rt.dylib中的相對@executable路徑有問題嗎? – Cliff

+0

我剛剛經過並仔細地嘗試遵循您的指示。我仍然得到:dyld:庫沒有加載:@executable_path /../ lib/libprofile_rt.dylib我認爲Xcode 4.2(4C199)和Xcode 4.2(4D199)之間必須有一個改變,它引入了這個。 – Cliff

+0

哇,無賴。我在雪豹。我認爲這可能解釋版本號的差異。經驗告訴我,完全可能的是,蘋果發佈的是一個錯誤的混亂。實際上,我很驚訝它確實有效。 – ageektrapped