В кластерной машине моей лаборатории у меня есть 2 компилятора, один - gcc4, а другой - gcc5. Библиотеки gcc4 находятся в стандартном каталоге (т.е. / usr / lib64), а библиотеки gcc5 находятся в /usr/local/lib64.
.
Итак, я компилировал свою программу и проверял библиотеку с помощью ldd:
ldd bin/cell
linux-vdso.so.1 => (0x00007fffad1fc000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00000039f0c00000)
libsundials_cvode.so.2 => /opt/Lib/sundials-2.7.0/lib/libsundials_cvode.so.2 (0x00002b16bab69000)
libsundials_nvecserial.so.2 => /opt/Lib/sundials-2.7.0/lib/libsundials_nvecserial.so.2 (0x00002b16bad93000)
libsundials_nvecparallel.so.2 => /opt/Lib/sundials-2.7.0/lib/libsundials_nvecparallel.so.2 (0x00002b16baf98000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000039efc00000)
libz.so.1 => /usr/lib64/libz.so.1 (0x00000037c7600000)
libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6 (0x00002b16bb1cd000)
libmpi.so.20 => /opt/Lib/openmpi-2.1.3/lib/libmpi.so.20 (0x00002b16bb570000)
libm.so.6 => /lib64/libm.so.6 (0x00000039f0000000)
libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00002b16bb863000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000039f0400000)
libc.so.6 => /lib64/libc.so.6 (0x00000039ef800000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00000039f0800000)
libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00000039f1000000)
/lib64/ld-linux-x86-64.so.2 (0x00000039ef000000)
libopen-rte.so.20 => /opt/Lib/openmpi-2.1.3/lib/libopen-rte.so.20 (0x00002b16bba7c000)
libopen-pal.so.20 => /opt/Lib/openmpi-2.1.3/lib/libopen-pal.so.20 (0x00002b16bbd05000)
librt.so.1 => /lib64/librt.so.1 (0x00000039f3c00000)
libutil.so.1 => /lib64/libutil.so.1 (0x00000039fca00000)
Как вы можете видеть, libstdc ++ находится в / usr / local / lib64 в этом двоичном файле.
Однако, когда я пытаюсь отправить задание с помощью команды qsub, выдается сообщение об ошибке:
/scratch4/maincode/elecphy/cellc/bin/cell: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /scratch4/maincode/elecphy/cellc/bin/cell)
Вместо проверки / usr / local / lib64 он проверил мой / usr / lib64, то есть старый каталог GCC4 libs.
Мои вопросы:
Как это может случиться?
Есть ли обходной путь, чтобы заставить двоичный файл перенаправить в правильный каталог библиотек GCC?