2013-04-03 50 views
4

我想有條件地鏈接庫(我有用於iOS設備的此庫,但我沒有用於模擬器)。我正在使用XCode 4.6和iOS 6.1。有條件鏈接iOS上的庫

我看了一個問題(和幾個類似的):iOS conditional link static library

-weak_library鏈接器標誌

我試着用RY以下標誌來構建項目:

-weak_library LibraryNameWithPath 

然而,給我一個錯誤:

ld: file not found: LibraryNameWithPath 

-weak-1連接標誌

我試着用下面的標誌來構建它:

-weak-lShortLibraryName 

,並得到了相同的結果:

ld: library not found for -lShortLibraryName 

思考

爲什麼這樣,它是否檢查圖書館的存在,如果它是明確的標記爲一個薄弱環節?

有沒有辦法在構建時間內進行條件鏈接(vs dlopen,dlclose和朋友的運行時間使用情況)?

+0

這是你想要的嗎? [條件鏈接庫](http://stackoverflow.com/questions/8298076/ios-conditional-link-static-library) –

+0

@AnoopVaidya:在那裏的答案是「use -weak_library」,它不適合我。 –

回答

4

我實際上並沒有試圖直接使用構建標記來做到這一點,但我已經使用Xcode GUI設置完成了它。選擇您的版本目標,然後構建階段,然後選擇將靜態庫添加到要鏈接的二進制文件列表。

但是,從右側的必需/可選菜單中選擇可選(這不是默認設置)。

enter image description here

因爲這是你在談論一個靜態庫,我想,那麼你就需要把一些預處理守衛在你的代碼,以禁止在模擬器中使用圖書館:

#if TARGET_IPHONE_SIMULATOR 
    NSLog(@"do nothing here!"); 
#else 
    HelloLibrary* hl = [[HelloLibrary alloc] init]; 
    NSString* result = [hl helloLibraryFoo]; 
#endif 

我做什麼其他,使這項工作(沒有其他構建設置進行了修改)。

建立用於模擬器,我只是得到這樣的警告:

ld: warning: ignoring file /Users/me/Desktop/code/MyAppName/libHelloLibrary.a, file was built for archive which is not the architecture being linked (i386): /Users/me/Desktop/code/MyAppName/libHelloLibrary.a

+0

謝謝你。我正在嘗試爲'CoreAudioKit'做到這一點,這是MIDI通過藍牙所必需的,但在模擬器中不可用。將框架更改爲「可選」並在代碼周圍的代碼中使用「#if」無法移除「庫未找到」消息。完全刪除框架的作品。我很難過。 –

+1

@Yar,我認爲最初的問題是針對靜態庫,但CoreAudioKit是一個(動態)框架,所以你的問題有點不同。你能問一個新問題嗎?通過在這裏的評論中發佈一個指向新問題的鏈接,可以自由地發表意見。謝謝。 – Nate

+0

謝謝!問題在這裏http://stackoverflow.com/q/31574430/8047和任何幫助讚賞! –