72家族网-手游源码论坛

查看:【17】 回复:【0】 发表于 2022-4-26 21:27 存档时间:2022-05-21

战神引擎手游源码

Linux解决libstdc++的版本问题

version `CXXABI_1.3.8' not found

version `GLIBCXX_3.4.21' not found

两者是一个问题导致的:

c++标准库太老了.没有更新.

查看当前 GCC 的版本

# strings /usr/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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.17
GLIBC_2.3.2
查找 libstdc++.so.6.0.21 库文件

# 查找库文件
# find / -name libstdc++.so.6.0.21
# 如果libstdc++.so.6.0.21库文件已存在,则按照下面的步骤创建软链接即可
# 如果libstdc++.so.6.0.21库文件不存在,则需要按照下面的步骤编译新版本的GCC,然后再创建软链接
编译新版本的 GCC

GCC 各版本的下载地址,其中 gcc-5.2.0 对应 GLIBCXX_3.4.21 与 libstdc++.so.6.0.21,而 gcc-6.5.0 对应 GLIBCXX_3.4.22 与 libstdc++.so.6.0.22,具体下载的 GCC 版本根据自己的需要进行选择。

# 下载文件(117M)
# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.bz2
# 解压文件
# tar -xvf gcc-5.2.0.tar.bz2
# 进入解压目录
# cd gcc-5.2.0
# 下载编译gcc所需的依赖文件和库
# ./contrib/download_prerequisites
# 建立输出目录,用于存放编译时所有产生的中间文件
# mkdir gcc-temp
# 进入输出目录
# cd gcc-temp
# 执行configure配置
# ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
# 编译gcc,指定编译使用的线程数为8,编译耗时较长,可能需要几个小时
# make -j8
# 这里为了避免影响系统的稳定性,暂时不执行"make install"和替换系统默认版本的gcc
建立软链接

# 进入输出目录
# cd gcc-temp
# 查找编译生成libstdc++.so库文件,下面查找到的libstdc++.so、libstdc++.so.6都只是软链接文件,libstdc++.so.6.0.21才是真正编译生成的库文件
# find . -name "libstdc++.so*"
./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
# 拷贝libstdc++.so.6.0.21库文件到lib64目录
# cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
# 进入lib64目录
# cd /usr/lib64
# 删除旧的链接文件
# rm -f libstdc++.so.6
# 创建新的链接文件
# ln -s libstdc++.so.6.0.21 libstdc++.so.6
验证新的 libstdc++.so.6.0.21 库文件是否生效

如果下面的输出结果中,出现 GLIBCXX_3.4.21,则代表新的 libstdc++.so.6.0.21 库文件生效。

# strings /usr/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.14
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
还有一个笨办法就是找个现成的libstdc++.so.6.0.21



把它拷到/usr/lib64下

删掉libstdc++.so.6这个软连接. rm -rf libstdc++.so.6

建立新连接ln -s libstdc++.so.6.0.21 libstdc++.so.6

千万别忘了ldconfig

最后看一眼:strings /usr/lib64/libstdc++.so.6 | grep GLIBC

大功告成!完事!

使用道具

关闭

72家族网 - 游戏开发者学习平台上一条 /1 下一条

本站资源来自互联网搜集,仅供本地电脑单机学习和交流,请勿用于商业用途,请自觉在24小时内删除。
本站仅提供信息存储空间服务,软件的复制品持有人不知道也没有合理的理由应当知道展示的作品侵权!
本站所有资源仅限用于研究产品软件内含、设计思想和原理为目的用途,禁止任何商用行为,违者后果自负!
若有侵权与文章中不妥之处,请联系邮箱:zhende5555@qq.com(手机随时接收邮件)并出示相关证明以便删除。敬请谅解!

2011-2022 私服论坛 www.sifubbs.com 手游源码技术讨论平台 Powered by Discuz!