[英]Using boost from XCODE 4.6.1 - what are the proper build settings?
[英]Proper Xcode settings
我有 Xcode 5.1.1 並且正在嘗試創建一個項目來為 OSX 構建我的應用程序。
該應用程序的結構如下:
我有一個靜態鏈接庫 (.a),2 個動態鏈接庫 (.dylib),它依賴於靜態庫,1 個動態庫 (.dylib),它依賴於這 2 個動態庫和使用那 1 個動態庫的可執行二進制文件庫(.dylib)。
在 Xcode 中,我通過轉到“Xcode ->Preferences->Derived Data (Advanced)”更改了輸出目錄。 在那里我選擇了“自定義-> 相對於工作區”。 這樣,所有內容都將保存在一個地方。
現在問題來了:我在將“.a”庫添加到“.dylib”之一時遇到了困難。
我在 Xcode 窗口的左上角選擇了一個目標,以便顯示構建屬性。 然后在“搜索”窗口中輸入“其他鏈接器標志”。 然后我在“構建設置窗口”中選擇了“其他鏈接器標志”並輸入了“-ldbinterface.a”。 嘗試編譯時出現錯誤:“ld:未找到 -llibdbinterface.a 的庫”。
接下來我嘗試添加以下行:“-L/Users/igorkorot/dbhandler/dbhandler/Build/Products/Debug”到“Other Linker Flags”。 但我得到了完全相同的錯誤。
接下來,我嘗試刪除這兩行,並將“libdbinterface.a”添加到“其他鏈接器標志”。 這次我得到:“clang:錯誤:沒有這樣的文件或目錄”。
作為參考,該文件確實存在:
Igors-MacBook-Air:Debug igorkorot$ pwd
/Users/igorkorot/dbhandler/dbhandler/Build/Products/Debug
Igors-MacBook-Air:Debug igorkorot$ ls -la
total 384
drwxr-xr-x 3 igorkorot staff 102 Mar 26 18:37 .
drwxr-xr-x@ 3 igorkorot staff 102 Mar 26 18:36 ..
-rw-r--r-- 1 igorkorot staff 193528 Mar 26 18:37 libdbinterface.a
我究竟做錯了什么? 在我的情況下添加靜態庫的正確方法是什么?
謝謝你。
如果靜態庫的文件名是:
libdbinterface.a
然后,您需要通過剝離前導lib
和文件擴展名 ( .a
) 將其指定給-l
鏈接器選項:
-ldbinterface
但是,我看到了前面的問題,因為我認為您可能會發現重復的符號定義(鏈接器錯誤或運行時問題),因為來自靜態庫的符號將出現在兩個動態庫中。
有兩種方法可以解決:
編譯動態庫,將Symbols Hidden By Default設置為Yes (在Build Settings > Code Generation 下),並僅通過使用以下方法注釋方法來公開要導出的符號:
__attribute__ ((visibility ("default")))
您通常會使用宏執行以下操作:
#define EXPORT __attribute__ ((visibility ("default")))
並且在函數/變量聲明中只使用這種形式:
extern EXPORT void aFunction(int someParam);
注意:您不需要為 Objective-C 類執行此操作,但您可能需要為 C++ 執行此操作(我不記得了)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.