簡體   English   中英

ld:警告:基於文本的存根文件不同步。 回退到庫文件進行鏈接

[英]ld: warning: text-based stub file are out of sync. Falling back to library file for linking

當我嘗試sourceCpp ,它會發出警告:

ld:警告:基於文本的存根文件 /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd 和庫文件 /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation 不同步。 回退到庫文件進行鏈接。

但該功能確實有效。 只是想知道如何解決這個警告。

使用 MacOS Mojave 10.14.2,我的修復方法是使用GitHub 上評論中的解決方案:

export SDKROOT=macosx10.14

將上面的行放在你的~/.bash_profile 10.14替換為您特定版本的 MacOSX Xcode 工具。 通過執行以下操作找出您擁有的版本:

xcrun --show-sdk-path

它將打印如下內容:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

只需抓住最后一個單詞,將其全部大寫並在上面的export命令中替換它。

2019 年 9 月更新

在最新版本中,他們從 sdk 中刪除了版本號。 只需獲取完整路徑並將其導出為SDKROOT ,如下所示:

export SDKROOT="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"

2021 年 8 月更新

為了避免在升級操作系統時不斷更新導出的值,您可以將xcrun命令直接放在 shell 腳本中:

export SDKROOT=$(xcrun --show-sdk-path)

我在 Mac 上編譯 Go 代碼時也遇到了這個問題。

tld 文件在/System/Library/Frameworks/中不同步。

解決方案

只需將最近的框架從MacOSX.sdk鏈接到/Library/Frameworks/

sudo ln -s  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreFoundation.framework /Library/Frameworks/CoreFoundation.framework

編輯:這似乎在 10.13.16 后停止工作。 重新安裝后嘗試它不會傷害您的 mac,但我不確定如何解決它。

最近遇到了這個,只需刪除mac的命令行工具並重新安裝。

$ rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install

完成這些步驟后,您將看到安裝新版本工具的彈出窗口。

重新安裝可能有幫助,但也可能沒有。

這是 Apple 的錯,他們需要使用另一個命令行工具更新來修復它。

暫時忽略警告。

(在此處查看其他遇到此問題的人: https : //github.com/vim/vim/issues/3445和此處: https : //github.com/golang/go/issues/26073

我認為這與 Rcpp 無關。

這與您的系統有關。

我在下面顯示了一個 tbd 文件的第一行。 它只是一個文本文件。 您可以使用文本編輯器打開它。

--- !tapi-tbd-v3
archs:           [ i386, x86_64, x86_64h ]
uuids:           [ 'i386: 17321B27-67AB-3D26-B9DF-A69624B1C82B', 'x86_64: 358C547D-E227-3228-8218-62327F4605C8', 
                   'x86_64h: 945E5C0A-86C5-336E-A64F-5BF06E78985A' ]
platform:        macosx
install-name:    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
current-version: 1452.23
compatibility-version: 150
exports:         
  - archs:           [ i386 ]
    symbols:         [ '$ld$add$os10.5$.objc_class_name_NSObject', '$ld$add$os10.6$.objc_class_name_NSObject', 
                       '$ld$add$os10.7$.objc_class_name_NSObject', '$ld$hide$os10.4$.objc_class_name_NSArray', 
                       '$ld$hide$os10.4$.objc_class_name_NSCalendar', '$ld$hide$os10.4$.objc_class_name_NSData', 
...

據我了解,tbd 文件包含真實庫文件的版本和位置。 它就像一個“鏈接”。 (僅個人理解,如有不對請指正。)

Xcode升級后,你的tbd文件和真實庫不同步了。 然后你得到了警告。

我認為您現在可以忽略此警告,因為您的編譯器已經回退並找到了正確的庫。

CoreFoundation 和 CoreFoundation.tbd 的日期顯示后者更舊。 這表明它可以被忽略。 通過刪除 .tbd 文件可以輕松解決不同步問題。 它不是必需的,如果不存在就不會產生不同步錯誤。

我在 10.13.6 上使用 CoreFoundation 和 IOKit,這是一個簡單的解決方案,可避免重新加載命令行工具或設置鏈接或嘗試導出 SDK 等。

約翰

如果您之前在~/.bash_profile~/.zshrc SDKROOT中設置了SDKROOT ,則您需要在更新 macOS 時更新它或刪除(如果您不需要它)。

這是我的情況export SDKROOT=macosx10.14在我的~/.bash_profile ,在我更新到 macOS Catalina 10.15.7 之后,它導致了問題。

如果您選擇更新,它將如下所示(基於之前的答案)

export SDKROOT="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"

暫無
暫無

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

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