---
title: 编译TensorFlow 1.15.5时依赖组件grpc编译失败的解决办法
description: "执行编译TensorFlow 1.15.5命令时提示external/grpc/src/core/lib/gpr/log_linux.cc:43:13: error: ambiguating new declaration of 'long int gettid()'，信息如下："
url: https://www.hikunpeng.com/document/detail/zh/SRA/ecosystemEnable/TensorFlow/kunpengtensorflow_02_0030.html
sourcePath: /source/zh/SRA/ecosystemEnable/TensorFlow/kunpengtensorflow_02_0030.html
indexId: cfaf24bcb187d06268fce750ee7117e125e423c415db63e8cb0cd892ff39c1dd72
---
# 编译TensorFlow 1.15.5时依赖组件grpc编译失败的解决办法

#### 问题现象描述

执行编译TensorFlow 1.15.5命令时提示external/grpc/src/core/lib/gpr/log_linux.cc:43:13: error: ambiguating new declaration of 'long int gettid()'，信息如下：


#### 关键过程、根本原因分析

关键错误信息：编译依赖组件grpc时，提示gettid函数的声明有歧义。

```
external/grpc/src/core/lib/gpr/log_linux.cc:43:13: error: ambiguating new declaration of 'long int gettid()'
   43 | static long gettid(void) { return syscall(__NR_gettid); }
```

根本原因分析：依赖组件grpc定义的gettid函数与系统库glibc定义冲突。


#### 结论、解决方案及效果

1. 下载依赖组件grpc。
  1 wget https://github.com/grpc/grpc/archive/4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz --no-check-certificate

2. 解压grpc并进入解压目录。
  1 2 tar -zxvf 4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz cd grpc-4566c2a29ebec0835643b972eb99f4306c4234a3

3. 将下列文件中的gettid改为gettid_sys。

  - “src/core/lib/gpr/log_posix.cc”：第34和89行
  - “src/core/lib/gpr/log_linux.cc”：第43和73行
  - “src/core/lib/iomgr/ev_epollex_linux.cc”：第1106和1126行
可以执行下列命令修改：

```
grep -rl 'gettid' src/ | xargs sed -i 's/\bgettid/gettid_sys/g'
```

修改前：
修改后：
4. 退出解压目录并压缩grpc包。
  1 2 cd .. tar -zcvf grpc-4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz grpc-4566c2a29ebec0835643b972eb99f4306c4234a3

5. 计算grpc的sha256值。
  1 sha256sum grpc-4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz

6. 创建Bazel本地仓并将修改后的grpc拷贝到本地仓中（此处本地仓选择“/home/bazel_local”，用户可自定义）。
  1 2 mkdir /home/bazel_local cp grpc-4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz /home/bazel_local/

7. 修改下载grpc的方式。

  a. 进入TensorFlow目录。
    1 cd path/to/tensorflow/tensorflow-1.15.5

  b. 打开“tensorflow/workspace.bzl”文件。
    1 vi tensorflow/workspace.bzl

  c. 按“i”进入编辑模式，修改“tensorflow/workspace.bzl”文件，在第514行替换新grpc压缩包的sha256值，在第517行后新增Bazel本地仓下载路径。
    修改前：

```
511     # WARNING: make sure ncteisen@ and vpai@ are cc-ed on any CL to change the below rule
512     tf_http_archive(
513         name = "grpc",
514         sha256 = "
67a6c26db56f345f7cee846e681db2c23f919eba46dd639b09462d1b6203d28c
",
515         strip_prefix = "grpc-4566c2a29ebec0835643b972eb99f4306c4234a3",
516         system_build_file = clean_dep("//third_party/systemlibs:grpc.BUILD"),
517         urls = [
518             "https://storage.googleapis.com/mirror.tensorflow.org/github.com/grpc/grpc/archive/4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz",
519             "https://github.com/grpc/grpc/archive/4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz",
520         ],
521     )
```


    修改后：

```
511     # WARNING: make sure ncteisen@ and vpai@ are cc-ed on any CL to change the below rule
512     tf_http_archive(
513         name = "grpc",
514         sha256 = "f15ad57d5cf1ef6e4552ddcfc4b5c45ba098d520eff2f113669efae1ff5e892d",
515         strip_prefix = "grpc-4566c2a29ebec0835643b972eb99f4306c4234a3",
516         system_build_file = clean_dep("//third_party/systemlibs:grpc.BUILD"),
517         urls = [
518             "file:///home/bazel_local/grpc-4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz",
519             "https://storage.googleapis.com/mirror.tensorflow.org/github.com/grpc/grpc/archive/4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz",
520             "https://github.com/grpc/grpc/archive/4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz",
521         ],
522     )
```


    其中sha256值和Bazel本地仓路径，请根据实际填写。

  d. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
8. 重新编译TensorFlow。
  1 bazel build --config=v1 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow/tools/pip_package:build_pip_package
