on Centos 6.9, I am building cmake 3.5.0. I have existing cmake 3.4.3 installed. For 3.5.0, I did make ok, then did 'sudo make install'. But it gives me :
/home/ckim/CARLA/carla/cmake-3.5.0/Bootstrap.cmk/cmake: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/ckim/CARLA/carla/cmake-3.5.0/Bootstrap.cmk/cmake)
/home/ckim/CARLA/carla/cmake-3.5.0/Bootstrap.cmk/cmake: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/ckim/CARLA/carla/cmake-3.5.0/Bootstrap.cmk/cmake)
make: *** [cmake_check_build_system] Error 1
But I have /usr/local/lib64 before /usr/lib64 in $LD_LIBRARY_PATH and the /usr/local/lib64/libstdc++.so.6 has GLIBC_3.4.15 and GLIBC_3.5.21.
ckim@stph45:~/CARLA/carla/cmake-3.5.0] strings /usr/local/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
What can be the problem?
But I have /usr/local/lib64 before /usr/lib64 in $LD_LIBRARY_PATH
When you run under sudo
, GLIBC will ignore LD_LIBRARY_PATH
and only use system paths to search for libraries.
If GLIBC didn't do that, you could trivially compromise any setuid
program by pointing LD_LIBRARY_PATH
to your own libc.so.6
.
Solutions:
Better: don't use LD_LIBRARY_PATH
. Instead compile your programs with appropriate -rpath=
linker option, so they just work.
Worse: sudo -s
.
Now set LD_LIBRARY_PATH
any way you want, then run make install
.