RUNPATH ดูเหมือนจะไม่สนใจ Python 3 ใน RHEL 7.4


0

ฉันสร้าง TensorFlow 1.12 จากแหล่งโดยใช้ Bazel 15.0, Python 3.6.5 และ GCC 7.3.0 ดูเหมือนว่าจะทำงานอย่างถูกต้อง แต่เมื่อฉันนำเข้าpandasก่อนที่จะนำเข้าtensorflowจะใช้/lib64/libstdc++.so.6งานมากกว่าที่เกี่ยวข้องกับ GCC 7.3.0:

$ python3 -c "import tensorflow, pandas" # no error
$ python3 -c "import pandas, tensorflow"
Traceback (most recent call last):
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "/apps/python/3.6.5/gcc-7.3.0/lib/python3.6/imp.py", line 243, in load_module
    return load_dynamic(name, filename, file)
  File "/apps/python/3.6.5/gcc-7.3.0/lib/python3.6/imp.py", line 343, in load_dynamic
    return _load(spec)
ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by /zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 74, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "/zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "/apps/python/3.6.5/gcc-7.3.0/lib/python3.6/imp.py", line 243, in load_module
    return load_dynamic(name, filename, file)
  File "/apps/python/3.6.5/gcc-7.3.0/lib/python3.6/imp.py", line 343, in load_dynamic
    return _load(spec)
ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by /zapps7/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/errors

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

ฉันทำให้แน่ใจว่าเมื่อใดที่จะสร้างการใช้-Wl,--enable-new-dtags,-rpath,/apps/gcc/7.3.0/lib64และได้ยืนยันว่า RUNPATH นั้นถูกตั้งค่าจริง:

$ readelf -d /apps/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so | grep RUNPATH
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN/../../_solib_k8/_U_S_Stensorflow_Spython_C_Upywrap_Utensorflow_Uinternal.so___Utensorflow:$ORIGIN/../../_solib_k8/_U@mkl_Ulinux_S_S_Cmkl_Ulibs_Ulinux___Uexternal_Smkl_Ulinux_Slib:$ORIGIN/:$ORIGIN/..:/apps/gcc/7.3.0/lib64]
$ ldd /apps/python-3.6.5-tensorflow/1.12.0/lib/python3.6/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so | grep libstdc++
    libstdc++.so.6 => /apps/gcc/7.3.0/lib64/libstdc++.so.6 (0x00007f82c9711000)

ดูเหมือนว่าแปลกที่ถึงแม้ว่าจะlddพบว่าถูกต้องlibstdc++.so.6(อาจจะไม่ซ้ำกันของปัญหานี้ ), ผิดใช้ภายใต้สถานการณ์นี้ LD_LIBRARY_PATHและLD_PRELOADไม่ได้ตั้งค่าและld.soหน้า manจะแสดงว่า RUNPATH ควรมีความสำคัญกว่า อาจเป็นได้ว่าฉันเข้าใจผิดว่าจะเกิดอะไรขึ้น - มันเป็นความประทับใจของฉันที่ขาดไปLD_LIBRARY_PATHและLD_PRELOADเอลฟ์RUNPATHเป็นผู้มีอำนาจสูงสุดในการค้นหาห้องสมุดและอะไรก็ตามที่lddเห็นควรเป็นสิ่งที่ใช้จริง ฉันเข้าใจผิดหรือเปล่า? มีวิธีจริง (เช่นไม่เพียงแค่ใช้อย่างเลอะเทอะLD_LIBRARY_PATH ) เพื่อแก้ไขปัญหานี้หรือไม่

มีพื้นหลังเล็กน้อยในปัญหา GitHub นี้แต่ฉันไม่รู้ว่ามันจะมีประโยชน์มากเพียงใด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.