在tensorflow中加载自定义ops时出现未定义的符号错误

时间:2017-10-17 13:10:31

标签: c++ tensorflow zlib undefined-symbol

我在使用tf.load_op_library('readmat.so')时遇到了问题,其中readmat.so是我的自定义C ++代码。但是我收到了以下错误:

gslin@scse-gpu2:~/my_files/CRNN$ python ctpn_cl_icdar15_ch2_train_v1_7.py
Traceback (most recent call last):
  File "ctpn_cl_icdar15_ch2_train_v1_7.py", line 13, in <module>
    import ICDAR15_ch2_768x768 as icdar15
  File "./datasets/ICDAR15_ch2_768x768.py", line 15, in <module>
    readmat = tf.load_op_library('/export/home/gslin/my_files/tensorflow/bazel-bin/tensorflow/core/user_ops/readmat.so')
  File "/export/home/gslin/.local/lib/python2.7/site-packages/tensorflow/python/framework/load_library.py", line 64, in load_op_library
    None, None, error_msg, error_code)
tensorflow.python.framework.errors_impl.NotFoundError: /export/home/gslin/my_files/tensorflow/bazel-bin/tensorflow/core/user_ops/readmat.so: undefined symbol: inflateInit_

符号inflateInit_/usr/include/zlib.h中定义,包含在readmat.cc中。

PS:此服务器的管理员在1周前进行系统升级后发生错误。我不是root用户。

系统:Ubuntu 14.04 Tensorflow:r1.1

对这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:0)

@SHD。我是淄川刘,用另一个账号联系你。我已经在具有相同操作系统和张量流的另一台机器上测试了该程序。我使用ldd命令检查依赖关系并得到:

tensor_v1@cool-Precision-WorkStation-T7500:~$ ldd ~/tools/tensorflow/tensorflow/bazel-bin/tensorflow/core/user_ops/readmat.so
linux-vdso.so.1 =>  (0x00007ffeda9b4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd1526fb000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd1523e9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd15201f000)
/lib64/ld-linux-x86-64.so.2 (0x000055bb007c5000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd151e08000)

在我遇到问题的机器上,使用ldd时得到的结果相同:

gslin@scse-gpu2:~/my_files/tensorflow$ ldd bazel-bin/tensorflow/core/user_ops/readmat.so
linux-vdso.so.1 =>  (0x00007ffc2769d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1fa168e000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1fa137c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1fa0fb6000)
/lib64/ld-linux-x86-64.so.2 (0x000055c72d6af000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1fa0da0000)

但前者正常工作。