TensorFlow 错误:在 'offsetof' 中定义类型是 Clang 扩展 [-Werror,-Wgnu-offsetof-extensions]

问题描述 投票:0回答:1

我是新手。

尝试使用以下命令构建 iOS 的选择性框架 -

bash tensorflow/lite/ios/build_frameworks.sh
--input_models=model1.tflite,model2.tflite
--target_archs=x86_64,armv7,arm64

但是出现错误 -

ERROR: /private/var/tmp/_bazel_tonmoy/d1033cf820cfe9e8569d67cf059cb6df/external/upb/BUILD:57:11: Compiling upb/upb.c [for tool] failed: (Exit 1): wrapped_clang failed: error executing command (from target @upb//:upb) external/local_config_cc/wrapped_clang '-D_FORTIFY_SOURCE=1' -fstack-protector -fcolor-diagnostics -Wall -Wthread-safety -Wself-assign -fno-omit-frame-pointer -g0 -O2 -DNDEBUG '-DNS_BLOCK_ASSERTIONS=1' ... (remaining 32 arguments skipped)

external/upb/upb/upb.c:192:10: error: defining a type within 'offsetof' is a Clang 
extension [-Werror,-Wgnu-offsetof-extensions]

192 | n &= ~(upb_alignof(upb_arena) - 1);

  |          ^~~~~~~~~~~~~~~~~~~~~~
external/upb/upb/upb.c:183:37: note: expanded from macro 'upb_alignof'

183 | #define upb_alignof(type) offsetof (struct { char c; type member; }, member)

  |                                     ^~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/16/include/__stddef_offsetof.h:16:43: note: expanded from macro 'offsetof'

16 | #define offsetof(t, d) __builtin_offsetof(t, d)

  |                                           ^
1 error generated.

Error in child process '/usr/bin/xcrun'. 1

Target //tensorflow/lite/ios/tmp:TensorFlowLiteSelectTfOps_framework failed to build

Use --verbose_failures to see the command lines of failed build steps.

INFO: Elapsed time: 218.346s, Critical Path: 17.92s

INFO: 4162 processes: 747 internal, 3415 local.

FAILED: Build did NOT complete successfully

如何解决这个问题,我对这个问题非常初学者。可能是什么原因。

ios xcode tensorflow clang
1个回答
0
投票

您在使用 TensorFlow Lite 构建 iOS 选择性框架期间遇到的错误表明 upb 库编译存在问题。让我们分解问题并探索解决方案:

错误细分:

编译器:Clang 错误消息:在 offsetof 中定义类型是 Clang 扩展(-Werror、-Wgnu-offsetof-extensions) 位置:外部/upb/upb.c:192 该代码片段尝试在表达式内使用带有类型的 offsetof,这是 Clang 支持的非标准扩展,但由于 -Werror 标志将警告视为错误而导致编译失败。

原因及解决办法:

Clang 扩展:upb 库可能是用一些特定于 Clang 的扩展编写的。这对于跨平台构建可能会出现问题。

解决方案:有两种办法: 禁用警告标志:您可以将 -Wno-gnu-offsetof-extensions 添加到编译器标志中以抑制此特定警告。但是,这可能掩盖其他潜在问题。

© www.soinside.com 2019 - 2024. All rights reserved.