被所有关于向ec2linux添加新glib版本的帖子弄糊涂了

confused by all the posts on adding a new glib version to ec2 linux

本文关键字:版本 glib 弄糊涂 添加 ec2linux      更新时间:2023-10-16

我知道这个问题以前已经被问过一千次了,因为我已经阅读了大部分答案,现在我完全迷失了方向。

关于EC2 AWS AMI

这是我构建新的glib版本的代码

wget https://download.gnome.org/sources/glib/2.47/glib-2.47.4.tar.xz
tar -xJf glib-2.47.4.tar.xz
mkdir /home/_tmp/glib_build
cd /home/_tmp/glib_build
/home/_tmp/glib-2.47.4/configure --prefix=/home/NewBin
make -j ${MAXCORES}
sudo make install

所有这些似乎都构建得很好,因为很多文件最终都在/home/NewBin中,并且日志中没有错误。

然后,我尝试使用以下从源代码构建HHVM

export LD_LIBRARY_PATH=/home/NewBin/lib:$LD_LIBRARY_PATH
sudo ldconfig 
cmake -DENABLE_ZEND_COMPAT=ON .
make -j ${MAXCORES}

返回以下错误

cmake -DENABLE_ZEND_COMPAT=ON .
cmake: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by cmake)
cmake: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by cmake)
+ make -j 40
make: relocation error: /home/_bin/lib/libc.so.6: symbol _dl_find_dso_for_object, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference

如果我在没有LD_LIBRARY_PATH 的情况下运行代码

sudo ldconfig 
cmake -DENABLE_ZEND_COMPAT=ON .
make -j ${MAXCORES}

我得到以下错误

cmake: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by cmake)
cmake: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by cmake)
+ make -j 40
make: *** No targets specified and no makefile found.  Stop.

如何将make指向新的glib版本?

您似乎有3个不同的问题,实际上没有一个与GLIB有关。

最严重的问题是你不明白自己在做什么,"愤怒的活动不能代替理解"。

此错误:

make: relocation error: /home/_bin/lib/libc.so.6: symbol _dl_find_dso_for_object, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference

是由于您在/home/bin/lib中安装了libc.so.6的专用副本。正如这个答案所解释的,如果您想使用非默认/非系统libc.so.6,您需要做更多的工作。特别是,将libc.so.6放在LD_LIBRARY_PATH上的任何位置都是一个非常糟糕的想法(TM)。

最后一个问题是:

cmake: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found ...

这个错误告诉您的是,您正在调用的cmake版本是使用比您安装的版本更高的版本的g++构建的。具体来说,GLIBCXX_4.3.21是在gcc-5.1中引入的(您的cmake是用它或g++的更高版本构建的),但系统libstdc++.so.6来自gcc的早期版本。

那么,解决方案是什么呢?

最简单的方法是将整个系统更新到一个足够新的发行版,其中所有二进制文件都是根据一组一致的系统库构建的。

如果你不能做到这一点,那么你需要更深入地了解你正在做什么,并更熟悉配置和构建你需要的各种二进制文件和库。特别是,您应该从不设置LD_LIBRARY_PATH,而是为需要非系统库版本才能运行的二进制文件添加适当的--rpath=...设置