在张量流中加载自定义操作时出现未定义的符号错误

问题描述:

我在使用tf.load_op_library('readmat.so')时遇到问题,其中readmat.so是我的自定义C++代码。但我得到了以下错误:在张量流中加载自定义操作时出现未定义的符号错误

[email protected]:~/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 inclued。

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

操作系统:Ubuntu 14.04 Tensorflow:R1.1

有关此问题的任何想法?

+0

我想readmat.so没有链接到libz.so.通过运行'ldd readmat.so'检查依赖关系,并检查是否看到libz.so. – SHR

@SHD。我是Zichuan Liu,用另一个帐户与你联系。我已经在具有相同操作系统和张量流的另一台机器上测试了该程序。我以前ldd命令检查的依赖,并得到:

[email protected]:~$ 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时得到了即使是同样的结果:

[email protected]:~/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) 

但前者一个正常工作。