【问题标题】:'ext/slist' file not found on OS X 10.9在 OS X 10.9 上找不到“ext/slist”文件
【发布时间】:2013-11-03 21:32:13
【问题描述】:

我正在尝试让一些较旧的第三方软件在 OS X 10.9 上进行编译。通过调整 Makefile 中的设置,我已经设法摆脱了大多数编译问题,这些设置最初是为 gcc 可能在 2005 年左右编写的。但是,我目前不知道如何克服这个错误C++源文件:

/utility.h:42:10:致命错误:找不到“ext/slist”文件

我了解ext/slist 属于STL 的某个版本。该版本是否已被取代,或者是否必须以任何特殊方式激活 Apple 版本的 Clang/LLVM(OS X 10.9 为 5.0)?

如果可能的话,我宁愿用预装的工具编译这个软件,而不是像安装gcc via MacPorts这样的步骤。

顺便说一句,这些警告也会持续存在:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/hash_set:202:2: 警告: 不推荐使用标头。迁移到 [-W#warnings] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/hash_map:209:2: 警告: 不推荐使用标头。迁移到 [-W#warnings]

【问题讨论】:

    标签: c++ xcode stl osx-mavericks llvm-clang


    【解决方案1】:

    Slist 是一个单链表,是 libstdc++ 中的一个扩展。 Mac OS X 一直在从 libstdc++ 转向提供 C++11 标准库的 libc++。 C++11在标题<forward_list>中提供了一个名为std::forward_list的单链表。

    我相信 libstdc++ 仍然包含在开发人员工具中,因此您也可以将您的项目切换回该工具。如果您使用的是 Xcode 项目,您可以在构建设置中选择库,或确保使用 -stdlib=libstdc++ 构建程序

    【讨论】:

    • 谢谢,-stdlib=libstdc++ 解决了这个问题。我现在遇到其他错误,例如:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/memory:222:7: note: candidate function not viable: no known conversion from 'tree *'(aka 'tree_node<> *') to 'std::auto_ptr<tree_node<tree_label> ..."。是不是我必须调整包含路径以反映旧库?
    • 不,该错误是指较旧的库。该错误似乎是新编译器和旧编译器之间差异的结果。
    • 所以看起来新的 stricter 编译器不再接受来自旧库的头文件,并且没有安装 (MacPorts | brew) & gcc 我被卡住了......
    • Clang 仍然经常与 libstdc++ 一起使用,因此问题不在于它不能与标头一起使用,而是您的程序以不受支持的方式使用该库。您将不得不修改程序本身的代码或使用较旧的工具链。如果您有旧版本的 OS X 和 Xcode,您可以尝试一下。 Xcode 4 仍然有 llvm-gcc,它可能会按原样成功编译程序。
    • @bemes53 是的,正如你所说,我计划使用带有 Xcode(或 gcc)的旧版 OS X。只是出于好奇:当错误消息指向标准头文件(这些不属于程序)时,为什么是程序的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多