ld:警告:基于文本的存根文件不同步.回到库文件进行链接

MOO*_*OOn 44 macos xcode r linker-warning rcpp

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

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

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

小智 12

我在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
Run Code Online (Sandbox Code Playgroud)

  • 这消除了我在MacOS High Sierra(10.13.6)和XCode 10.1中看到的警告.重新安装xcode CLI没有为我修复它.我需要链接很多框架.这是[脚本](https://gist.github.com/wawiesel/eba461de5f5e38f7f0ac93ae3676b484). (4认同)

Pau*_*erg 10

使用MacOS Mojave 10.14.2,对我来说,解决方法是在GitHub上使用以下注释中的解决方案:

export SDKROOT=macosx10.14
Run Code Online (Sandbox Code Playgroud)

将上述行放在您的~/.bash_profile。替换10.14为特定版本的MacOSX Xcode工具。通过执行以下操作找出您的版本:

xcrun --show-sdk-path
Run Code Online (Sandbox Code Playgroud)

它将打印如下内容:

/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"
Run Code Online (Sandbox Code Playgroud)

  • 在OSX 10.13.6上像灵符一样工作。感谢您包含`xcrun`技巧。我使用Visual Studio Code代替XCode,所以我不知道自己拥有哪个XCode版本。 (4认同)
  • 完美的。我使用了“export SDKROOT=$(xcrun --show-sdk-path)”,它消除了错误。谢谢。 (2认同)

Hig*_*ead 6

编辑:这似乎已经停止了10.13.16之后的工作.尝试它不会伤害你的mac重新安装后,但我不知道如何解决它继续.

最近碰到这个,只需删除mac的命令行工具并重新安装.

$ rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install
Run Code Online (Sandbox Code Playgroud)

完成这些步骤后,您将看到一个用于安装新版本工具的pop.

  • 这不再解决10.13.6的问题 (19认同)
  • 以上对我不起作用.有没有人对如何解决这个问题有其他想法?我已经卸载了xcode和工具.然后重新安装,我仍然得到相同的错误.它似乎导致configure失败,认为没有安装库.ld:警告:基于文本的存根文件.../Foundation.tbd和库文件.../Foundation不同步.回到库文件进行链接.ld:警告:基于文本的存根文件... CoreFoundation.tbd和库文件... CoreFoundation不同步.回到库文件进行链接. (13认同)
  • 它也没有为10.14解决它. (7认同)

小智 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', 
...
Run Code Online (Sandbox Code Playgroud)

据我了解,tbd 文件包含真实库文件的版本和位置。它就像一个“链接”。(仅代表个人理解,如有错误请指正。)

Xcode升级后,你的tbd文件和真实库不同步。然后你就收到了警告。

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