山间明月文化传媒作品集 既然选择了远方,便只顾风雨兼程

繁体转简体,CentOS安装OpenCC,升级gcc

最近在做智能机器人聊天功能,面向的是全国友人,南方地区有使用繁体的,所以需要搞一个繁体转简体的功能接口。Opencc是个非常棒的繁体转简体开源项目,甚至支持些方言文字。 RIME | 中州韻輸入法引擎,一个支持方言的输入法,哈哈。


开源项目地址:https://github.com/BYVoid/OpenCC


安装步骤:

$git clone 
$cd OpenCC
$make
$make install

安装完成后,测试使用:

$echo '嚴格區分「一簡對多繁」和「一簡對多異」' | opencc -c t2s

运行效果:

QQ截图20160122113540.png


注意:

不过因为我用的 centos 6 有点老了, 过程中也出现了一点小情况,大概记录一下。

首先,项目页面上有说明,要编译 OpenCC,至少需要 gcc 4.6 或者 clang 3.2,而我系统中还是 gcc 4.4.7

$gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

先升级 gcc 版本(升级过程),新的 gcc 安装在 /usr/local/gcc-4.8.1/ 下面

$gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-4.8.1/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/usr/local/gcc-4.8.1 --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 4.8.1 (GCC)

重新编译OpenCC,遇到错误

$ make...[ 55%] Building STCharacters.ocd
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ../src/tools/opencc_dict)
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ../src/tools/opencc_dict)
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /var/www/html/test/fj/opencc-1.0.3/build/rel/src/libopencc.so.2)
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /var/www/html/test/fj/opencc-1.0.3/build/rel/src/libopencc.so.2)
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /var/www/html/test/fj/opencc-1.0.3/build/rel/src/libopencc.so.2)
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /var/www/html/test/fj/opencc-1.0.3/build/rel/src/libopencc.so.2)
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /var/www/html/test/fj/opencc-1.0.3/build/rel/src/libopencc.so.2)
../src/tools/opencc_dict: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /var/www/html/test/fj/opencc-1.0.3/build/rel/src/libopencc.so.2)
make[3]: *** [data/STCharacters.ocd] 错误 1
make[3]: Leaving directory `/var/www/html/test/fj/opencc-1.0.3/build/rel'make[2]: *** [data/CMakeFiles/Dictionaries.dir/all] 错误 2
make[2]: Leaving directory `/var/www/html/test/fj/opencc-1.0.3/build/rel'make[1]: *** [all] 错误 2
make[1]: Leaving directory `/var/www/html/test/fj/opencc-1.0.3/build/rel'make: *** [build] 错误 2

libstdc++ 的问题,检查确认一下

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
3659:GLIBCXX_3.4
3660:GLIBCXX_3.4.1
3661:GLIBCXX_3.4.2
3662:GLIBCXX_3.4.3
3663:GLIBCXX_3.4.4
3664:GLIBCXX_3.4.5
3665:GLIBCXX_3.4.6
3666:GLIBCXX_3.4.7
3667:GLIBCXX_3.4.8
3668:GLIBCXX_3.4.9
3669:GLIBCXX_3.4.10
3670:GLIBCXX_3.4.11
3671:GLIBCXX_3.4.12
3672:GLIBCXX_3.4.13
8089:GLIBCXX_FORCE_NEW
8152:GLIBCXX_DEBUG_MESSAGE_LENGTH

GLIBCXX 最高只有 3.4.13,查看系统中有没有其他的 libstdc++

找到一个 6.0.20 的,替换掉当前使用的 libstdc++

$ sudo find / -name libstdc++.so.6*
/usr/local/lib64/libstdc++.so.6.0.20
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.20-gdb.py
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.13
...
$ sudo cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64/
$ sudo ln -s -f /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6

检查一下新的 libstdc++,GLIBCXX 最高到 3.4.20 了

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
3790:GLIBCXX_3.4
3791:GLIBCXX_3.4.1
3792:GLIBCXX_3.4.2
3793:GLIBCXX_3.4.3
3794:GLIBCXX_3.4.4
3795:GLIBCXX_3.4.5
3796:GLIBCXX_3.4.6
3797:GLIBCXX_3.4.7
3798:GLIBCXX_3.4.8
3799:GLIBCXX_3.4.9
3800:GLIBCXX_3.4.10
3801:GLIBCXX_3.4.11
3802:GLIBCXX_3.4.12
3803:GLIBCXX_3.4.13
3804:GLIBCXX_3.4.14
3805:GLIBCXX_3.4.15
3806:GLIBCXX_3.4.16
3807:GLIBCXX_3.4.17
3808:GLIBCXX_3.4.18
3809:GLIBCXX_3.4.19
3810:GLIBCXX_3.4.20
8656:GLIBCXX_FORCE_NEW
8878:GLIBCXX_DEBUG_MESSAGE_LENGTH

再重装编译OpenCC,编译成功

$make
$make install
$ which opencc
/usr/bin/opencc

查看 OpenCC 版本,报错

$ opencc --version
opencc: error while loading shared libraries: libopencc.so.2: cannot open shared object file: No such file or directory

在系统中找到了相关文件

$ sudo find / -name libopencc.so.2
/usr/lib/libopencc.so.2
...

因为是64位系统,尝试在 lib64 目录下建立一个链接文件

$ sudo ln -s /usr/lib/libopencc.so.2 /usr/lib64/libopencc.so.2

再次查看 OpenCC 版本,没有报错了

$ opencc --version

Open Chinese Convert (OpenCC) Command Line Tool
Version: 1.0.3

测试使用:

$echo '嚴格區分「一簡對多繁」和「一簡對多異」' | opencc -c t2s
严格区分「一简对多繁」和「一简对多异」


标签: gccopencc

作者:松鼠先生 分类:技术分享 浏览:6616 评论:7
留言列表
访客
访客 厉害 但是无法升级gcc的情况下 可以参考 https://www.cnblogs.com/coyu/p/5750627.html  回复
松鼠先生
松鼠先生 444  回复
松鼠先生
松鼠先生 111  回复
11
11 大赞  回复
涂伟忠
涂伟忠 赞一个,问题解决了  回复
发表评论
来宾的头像