'make install' 抱怨 libstdc++.so.6 没有 GLIBCXX_3.4.15 但我在 LD_LIBRARY_PATH 中有 libstdc++.so.6 文件
'make install' compains libstdc++.so.6 not having GLIBCXX_3.4.15 but I have libstdc++.so.6 file in the LD_LIBRARY_PATH
在 Centos 6.9 上,我正在构建 cmake 3.5.0。我已经安装了现有的 cmake 3.4.3。对于 3.5.0,我做了 ok,然后做了 'sudo make install'。但它给了我:
/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
但是我在 $LD_LIBRARY_PATH 中的 /usr/lib64 之前有 /usr/local/lib64 并且 /usr/local/lib64/libstdc++.so.6 有 GLIBC_3.4.15 和 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
可能是什么问题?
But I have /usr/local/lib64 before /usr/lib64 in $LD_LIBRARY_PATH
当你在sudo
下运行时,GLIBC将忽略LD_LIBRARY_PATH
,只使用系统路径搜索库。
如果 GLIBC 不这样做,您可以通过将 LD_LIBRARY_PATH
指向您自己的 libc.so.6
.
来轻易破坏任何 setuid
程序
解决方案:
最好:不要使用 LD_LIBRARY_PATH
。而是使用适当的 -rpath=
链接器选项编译您的程序,这样它们就可以正常工作。
更糟:sudo -s
。
现在设置 LD_LIBRARY_PATH
任何你想要的方式,然后 运行 make install
.
在 Centos 6.9 上,我正在构建 cmake 3.5.0。我已经安装了现有的 cmake 3.4.3。对于 3.5.0,我做了 ok,然后做了 'sudo make install'。但它给了我:
/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
但是我在 $LD_LIBRARY_PATH 中的 /usr/lib64 之前有 /usr/local/lib64 并且 /usr/local/lib64/libstdc++.so.6 有 GLIBC_3.4.15 和 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
可能是什么问题?
But I have /usr/local/lib64 before /usr/lib64 in $LD_LIBRARY_PATH
当你在sudo
下运行时,GLIBC将忽略LD_LIBRARY_PATH
,只使用系统路径搜索库。
如果 GLIBC 不这样做,您可以通过将 LD_LIBRARY_PATH
指向您自己的 libc.so.6
.
setuid
程序
解决方案:
最好:不要使用
LD_LIBRARY_PATH
。而是使用适当的-rpath=
链接器选项编译您的程序,这样它们就可以正常工作。更糟:
sudo -s
。 现在设置LD_LIBRARY_PATH
任何你想要的方式,然后 运行make install
.