55

当我尝试时sourceCpp,它会发出警告:

ld:警告:基于文本的存根文件 /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd 和库文件 /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation 不同步。回退到库文件进行链接。

但该功能确实有效。只是想知道如何解决这个警告。

4

7 回答 7

39

使用 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)
于 2019-03-25T18:46:26.057 回答
13

我在 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
于 2018-11-02T01:57:34.860 回答
6

编辑:这似乎在 10.13.16 后停止工作。重新安装后尝试它不会伤害您的Mac,但我不确定如何修复它。

最近遇到这个,只需删除mac的命令行工具并重新安装即可。

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

在这些步骤之后,您将看到安装新版本工具的弹出窗口。

于 2018-07-31T17:42:57.060 回答
3

重新安装可能会有所帮助,但也可能不会。

这是 Apple 的错,他们需要通过另一个命令行工具更新来修复它。

暂时忽略警告。

(在这里看到一堆其他人遇到这个问题: https://github.com/vim/vim/issues/3445和这里:https : //github.com/golang/go/issues/26073

于 2018-10-09T22:36:20.687 回答
0

我认为这与 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文件和真实库不同步了。然后你得到了警告。

我认为您现在可以忽略此警告,因为您的编译器已经退回并找到了正确的库。

于 2018-07-13T17:03:45.757 回答
0

如果您之前在 macOS 中设置SDKROOT~/.bash_profile或者~/.zshrc您需要在更新 macOS 时更新它或删除(如果您不需要它)。

export SDKROOT=macosx10.14~/.bash_profile更新到 macOS Catalina 10.15.7 之后,我的 .

如果您选择更新,它将看起来像这样(基于之前的答案)

export SDKROOT="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
于 2021-02-10T00:03:21.567 回答
0

CoreFoundation 和 CoreFoundation.tbd 的日期表明后者更老。这表明它可以被忽略。通过删除 .tbd 文件可以轻松解决不同步问题。它不是必需的,如果不存在,则不会生成不同步错误。

我在 10.13.6 上使用 CoreFoundation 和 IOKit,这是一个简单的解决方案,可以避免重新加载命令行工具或设置链接或尝试导出 SDK 等。

约翰

于 2020-04-10T16:11:14.507 回答