提问人:Mitesh Baraiya 提问时间:9/19/2023 最后编辑:Mitesh Baraiya 更新时间:11/18/2023 访问量:22023
命名空间“std”中没有名为“unary_function”的模板;你是说“__unary_function”吗?
No template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
问:
刚刚将我的 Xcode 升级到 15.0,突然它开始给我以下错误RCT_Folly
No template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
这是它失败的行:
结构hash_base:std::unary_function<T, std::size_t> {};
我尝试删除缓存数据和派生数据并清理构建。也尝试删除豆荚和node_modules。但没有任何帮助。
答:
这有点傻,但我通过按照 XCode 的建议来解决它。__unary_function
所以实际的线是......
结构hash_base:std::__unary_function<T, std::size_t> {};
评论
所有库都必须更新其代码以使用 std::function 和 std::bind 而不是 unary_function
解决方法
选择 Pod > Build Settings > 在“宏”部分下的“Apple Clang - 预处理>”部分中
添加 Release & Debug -> _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION
PS:要添加这个,只需在列上CLIC,然后在底部的“+”上添加CLIC->然后粘贴:_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION
评论
在源文件中修复此问题之前,最好的选择是在 podfile 中添加已删除的 libcpp 函数,如此处解决 https://github.com/facebook/react-native/issues/37748#issuecomment-1580589448
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION']
end
end
end
就我而言,我在构建失败后遵循了 Xcode 的建议。我只需单击“修复”,现在一切正常。
我希望它能在下一次更新中得到修复。
评论
运行后,我在终端中遇到了此错误。我通过以下步骤解决了它:npx react-native run-ios
- 打开 Xcode
- 单击播放图标以启动模拟器
- 模拟器将失败,但 Xcode 会在侧边栏中显示错误。单击错误以查看错误在代码中的位置。
- 点击“修复”按钮
- 做!现在模拟器将成功运行。
评论
@Ash是对的,我将我的 Xcode 和 iOS 版本更新到 17.0 一切 工作正常,但是当我在 iOS 17 上运行它时,我遇到了这个错误。
No template named 'unary_function' in namespace 'std'; did you mean '__unary_function'
我按照提供的步骤修复它,应用程序开始运行。 但是,当我打开地图屏幕时,它崩溃了,该屏幕正在使用 react-native-maps。之后,我删除了 pod,重新安装了节点 模块,但同样的问题仍然存在。令人惊讶的是,当 我将以下代码添加到我的 Podfile 并重新安装了 pod, 应用程序开始正常工作,一切正常。 你必须同时解决这两个问题。
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION']
end
end
end
对于任何遇到此错误的 React Native 用户,Facebook 已在 v0.72.5 中发布了修复程序 - 发行说明。
XCode 15 修复(21763e85e3、0dbd621c59 和 8a5b2d6735)
npm update react-native
评论
如果您仍然有较旧的 RN 版本,
这对我有用:
post_install do |installer|
react_native_post_install(installer)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
installer.pods_project.build_configurations.each do |config|
installer.pods_project.targets.each do |target|
if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle"
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
end
end
# Set the preprocessing macro for the whole Pods project
existing_flags = config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
existing_flags << '_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = existing_flags
end
end
似乎还有另一种解决方法
https://github.com/facebook/react-native/issues/37748#issuecomment-1580334650
评论
如果可以控制编译标志,则有两种选择:
使 clang 重新启用已弃用的函数:
-D_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION
防止 Boost 使用已弃用的功能:
-DBOOST_NO_CXX98_FUNCTION_BASE
sed -i '' 's/std::unary_function/__unary_function/g' ios/Pods/boost/boost/container_hash/hash.hpp
使用 grep 修复
评论