被所有关于向ec2linux添加新glib版本的帖子弄糊涂了
confused by all the posts on adding a new glib version to ec2 linux
我知道这个问题以前已经被问过一千次了,因为我已经阅读了大部分答案,现在我完全迷失了方向。
关于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=...
设置仅。
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- 如何正确实现与基类不同的版本?
- 从预处理器获取 Windows 版本(C++ Win32)
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如何在C++中将 Python 字符串转换为其转义版本?
- 被所有关于向ec2linux添加新glib版本的帖子弄糊涂了