簡體   English   中英

正確的 Xcode 設置

[英]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

但是,我看到了前面的問題,因為我認為您可能會發現重復的符號定義(鏈接器錯誤或運行時問題),因為來自靜態庫的符號將出現在兩個動態庫中。

有兩種方法可以解決:

  1. 使靜態庫動態化。
  2. 編譯動態庫,將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM