簡體   English   中英

使/usr/local/lib 成為mac os x 上ld 的默認庫搜索路徑?

[英]Make /usr/local/lib a default library search path for ld on mac os x?

我安裝了 XCode,但由於某種原因,/usr/local/lib 不在默認庫搜索路徑中:

gcc -Xlinker -v

給我:

@(#)PROGRAM:ld  PROJECT:ld64-224.1
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 armv6m armv7m armv7em
Library search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib
Framework search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/

這是不幸的,因為/usr/local/lib是已安裝庫的相當規范的位置,並且在mac os x上沒有/etc/ld.so.conf + ldconfig來修改默認庫搜索路徑。 所以不使用-L/usr/local/lib這會導致鏈接器錯誤。 除了設置環境變量DYLD_LIBRARY_PATH之外,還有其他非運行時選項嗎?

編輯:設置DYLD_LIBRARY_PATH環境變量對我沒有任何作用。 我必須設置LIBRARY_PATH變量才能將/usr/local/lib下安裝的/usr/local/libgcc

安裝XCode時是否有關於此的選項? (是工作電腦,自己沒裝)

要使用 Xcode 向我的項目添加臨時庫,我執行了以下操作:

在此處輸入圖片說明

要將臨時包含路徑添加到我的 XCode 庫搜索路徑,我必須執行以下操作:

在此處輸入圖片說明

如果要添加默認 包含和搜索路徑,則需要使用:

對於包含路徑:

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH

對於庫路徑:

LIBRARY_PATH

為了讓 OS X 中的 Xcode 和其他 GUI 應用程序(在 10.10 上測試)能夠訪問這些環境變量,您需要使用以下方法設置變量:

/bin/launchctl setenv LIBRARY_PATH /usr/local/lib
/bin/launchctl setenv CPATH /usr/local/include

但這些都不是永久性的。 為了在重新啟動時使用這些變量,您需要創建一個啟動腳本。 有關示例,請參閱此頁面。

以 DYLD_ 開頭的環境變量(如 DYLD_LIBRARY_PATH)特定於 Apple 的動態鏈接編輯器 dyld。 手冊頁指出:

DYLD_LIBRARY_PATH這是包含庫的目錄的冒號分隔列表。 動態鏈接器在搜索庫的默認位置之前先搜索這些目錄。 它允許您測試現有庫的新版本。 對於程序使用的每個庫,動態鏈接器依次在 DYLD_LIBRARY_PATH 中的每個目錄中查找它。 如果它仍然找不到庫,它會依次搜索 DYLD_FALL-BACK_FRAMEWORK_PATH 和 DYLD_FALLBACK_LIBRARY_PATH。 對 otool(1) 使用 -L 選項。 發現可執行文件所鏈接的框架和共享庫。

請注意,默認情況下 DYLD_FALLBACK_LIBRARY_PATH 已經包含對標准 /usr/local/lib 的引用。

DYLD_FALLBACK_LIBRARY_PATH這是包含庫的目錄的冒號分隔列表。 它用作安裝路徑中未找到的庫的默認位置。 默認情況下,它設置為 $(HOME)/lib:/usr/local/lib:/lib:/usr/lib。

Xcode 具有項目范圍或特定於目標的構建設置,例如“庫搜索路徑”,您可以在其中定義需要讓鏈接器知道的非標准位置的路徑。

除了將 *.dylib 文件復制和添加到您的 Xcode 項目之外,您還需要將它們“安裝”到這些已知庫位置之一。 否則 O/S 加載程序(啟動進程)無法在應用程序映像的實際啟動或運行時使用它們。

請參閱: https : //developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/UsingDynamicLibraries.html

請注意,C++ 和 Object-C 在動態庫方面存在挑戰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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