OpenCC安装记录

安装OpenCC
因需要gcc-4.6.1以上
首先升级gcc,参考http://ju.outofmemory.cn/entry/112472《CentOS 5.7 编译安装gcc/g++ 4.8.4》

———-

本文记录了在CentOS上编译安装gcc 4.8.4的过程。

1、安装依赖三大件
按顺序安装gmp、mpfr、mpc,注意要都是disable share

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.gz
tar -xzvf gmp-4.3.2.tar.gz
./configure –enable-shared=no
make -j4
sudo make install
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
tar -xjvf mpfr-2.4.2.tar.bz2
cd mpfr-2.4.2
./configure –enable-shared=no
make -j4
sudo make install
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar -xzvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure –disable-shared
make -j2
sudo make install
上述步骤也可以有偷懒的方法:让gcc自动下载并编译。

cd gcc-4.8.4
./contrib/download_prerequisites
2、编译gcc
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.4/gcc-4.8.4.tar.gz
tar -xzvf gcc-4.8.4.tar.gz
cd gcc-4.8.4
./configure –prefix=/home/coder4/soft/gcc4.8.4 –with-mpfr-lib=/usr/local/lib –enable-languages=c,c++ –disable-multilib
LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/usr/local/lib”
make -j4
make install
补充一下,上面的LD_LIBRARY_PATH很重要,如果不指定,make会出奇奇怪怪的错误。
———————————————————————————————
http://www.centoscn.com/image-text/install/2013/0803/916.html 《CentOS 安装升级GCC4.6.1》

———-

最近由于需求的原因,需要把目前gcc-4.4.4升级到gcc-4.6.1,考虑到有多台的原因,做了一个脚本自动安装结合批量工具分发。
一、安装环境
系统版本:centos6.0X64
原GCC版本:gcc-4.4.4
新GCC版本:gcc-4.6.1
二、正式安装
1、下载安装的源码:
如下需要下载以下包:gcc-4.6.1.tar.bz2 gmp-4.3.2.tar.bz2 mpc-0.8.1.tar.gz mpfr-2.4.2.tar.bz2
下载地址如下:
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/{gmp-4.3.2.tar.bz2,mpc-0.8.1.tar.gz,mpfr-2.4.2.tar.bz2}
wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.bz2 即可!

2、解压安装:安装有先后顺序:GMP、MPFR、MPC、GCC
安装GMP: tar jxf gmp-4.3.2.tar.bz2 &&cd gmp-4.3.2/ ;./configure –prefix=/usr/local/gmp/ &&make &&make install

安装MPFR:
cd ../ ;tar jxf mpfr-2.4.2.tar.bz2 ;cd mpfr-2.4.2/ ;./configure –prefix=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install

安装MPC:
cd ../ ;tar xzf mpc-0.8.1.tar.gz ;cd mpc-0.8.1 ;./configure –prefix=/usr/local/mpc –with-mpfr=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install

安装GCC:
cd ../ ;tar jxf gcc-4.6.1.tar.bz2 ;cd gcc-4.6.1 ;./configure –prefix=/usr/local/gcc –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++ –with-gmp=/usr/local/gmp –with-mpfr=/usr/local/mpfr/ –with-mpc=/usr/local/mpc/ &&make &&make install

然后执行如下:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/

//这一步很关键,设置变量,不设置后面会报错。
make && make install

安装完毕即可!然后做一个链接就可以使用GCC了

mkdir -p /data/backup/`date +%Y%m%d`

mv /usr/bin/{gcc,g++} /data/backup/`date +%Y%m%d`

新建软链接:

ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc

ln -s /usr/local/gcc/bin/g++ /usr/bin/g++

三、测试GCC
直接输入gcc -v 可以查看到gcc 版本为4.6.1和相关的编译参数就ok了!附上一个最简单的安装脚本:
#!/bin/sh
##auto make install gcc
##2012-07-03
tar jxf gmp-4.3.2.tar.bz2 &&cd gmp-4.3.2/ ;./configure –prefix=/usr/local/gmp/ &&make &&make install

sleep 1
cd ../ ;tar jxf mpfr-2.4.2.tar.bz2 ;cd mpfr-2.4.2/ ;./configure –prefix=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install

cd ../ ;tar xzf mpc-0.8.1.tar.gz ;cd mpc-0.8.1 ;./configure –prefix=/usr/local/mpc –with-mpfr=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install

cd ../ ;tar jxf gcc-4.6.1.tar.bz2 ;cd gcc-4.6.1 ;./configure –prefix=/usr/local/gcc –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++ –with-gmp=/usr/local/gmp –with-mpfr=/usr/local/mpfr/ –with-mpc=/usr/local/mpc/

if
[ $? -eq 0 ];then
echo “This gcc configure is success”
else
echo “This gcc configure is failed”
fi
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/

make && make install

[ $? -eq 0 ]&&echo This is make install success

———————————————————————————————
由于OpenCC用c++编译,刚开始没留意一直使用旧版gcc的c++,导致编译失败
需要把增加ln -s /usr/local/gcc/bin/c++ /usr/bin/c++

———-

http://yangchaoblog.com/posts/centos-6-compile-and-install-opencc.html 《Centos 6 下编译安裝 OpenCC》

———-

最近项目中需要用到简繁转换的功能,在网上看了下,最后考虑使用 OpenCC 这个开源项目来转换。由于没有找到比较新版本的 rpm 安装包,只好尝试自己编译安装了。

步骤很简单,基本的两步就完了

$ make
$ sudo make install
不过因为我用的 centos 6 有点老了, 过程中也出现了一点小情况,大概记录一下。
首先,项目页面上有说明,要编译 OpenCC,至少需要 gcc 4.6 或者 clang 3.2,而我系统中还是 gcc 4.4.7

$ gcc –version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
先升级 gcc 版本(过程略过),新的 gcc 安装在 /usr/local/bin/ 下面,升级完后

$ gcc –version
gcc (GCC) 4.9.1
重新编译,遇到错误

$ 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++

$ 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

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

$ 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
重新编译,顺利通过

$ make
[ 55%] Building STCharacters.ocd
[ 57%] Building STPhrases.ocd
[ 60%] Building TSCharacters.ocd
[ 63%] Building TSPhrases.ocd
[ 65%] Building TWVariants.ocd
[ 68%] Building TWVariantsRevPhrases.ocd
[ 71%] Building JPVariants.ocd
[ 73%] Building HKVariants.ocd
[ 76%] Building HKVariantsPhrases.ocd
[ 78%] Building HKVariantsRevPhrases.ocd
[ 81%] Generating TWPhrases.txt
[ 84%] Building TWPhrases.ocd
[ 86%] Generating TWPhrasesRev.txt
[ 89%] Building TWPhrasesRev.ocd
[ 92%] Generating TWVariantsRev.txt
[ 94%] Building TWVariantsRev.ocd
[ 97%] Generating HKVariantsRev.txt
[100%] Building HKVariantsRev.ocd
make[3]: Leaving directory `/var/www/html/test/fj/opencc-1.0.3/build/rel’
[100%] Built target Dictionaries
make[2]: Leaving directory `/var/www/html/test/fj/opencc-1.0.3/build/rel’
make[1]: Leaving directory `/var/www/html/test/fj/opencc-1.0.3/build/rel’
安装顺利完成

$sudo 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
OpenCC 的具体用法在 $ opencc –help 里面写的比较清楚了,最后测试一下中文转换

$ echo ‘测试中文转换’ | opencc
測試中文轉換
$ echo ‘测试中文转换’ | opencc -c s2t
測試中文轉換

$ echo ‘测试中文转换’ > chs
$ opencc -i chs -o cht
$ cat chs
测试中文转换
$ cat cht
測試中文轉換

———-

安装opencc4php:
git clone https://github.com/NauxLiu/opencc4php.git –depth 1
make步骤错误
/usr/opencc4php/opencc.c: At top level:
/usr/opencc4php/opencc.c:212:2: error: ‘PHP_FE_END’ undeclared here (not in a function)
PHP_FE_END /* Must be the last line in opencc_functions[] */

PHP扩展开发报错解决[error: ‘PHP_FE_END’ undeclared here (not in a function)] .
解决方法:进到php包的目录
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
sed -i ‘s|PHP_FE_END|{NULL,NULL,NULL}|’ ./ext/**/*.c
sed -i ‘s|ZEND_MOD_END|{NULL,NULL,NULL}|’ ./ext/**/*.c

例如:
进入/usr/opencc4php/目录
sed -i ‘s|PHP_FE_END|{NULL,NULL,NULL}|’ *.c
sed -i ‘s|ZEND_MOD_END|{NULL,NULL,NULL}|’ *.c
解决!

———-

make install完成
Installing shared extensions: /usr/lib64/php/modules/
[root@li745-70 opencc4php]# cd /usr/lib64/php/modules/
[root@li745-70 modules]# ls
curl.so fileinfo.so json.so opencc.so phar.so zip.so

但往php.ini添加扩展后,运行php提示错误

PHP Warning: PHP Startup: opencc: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20100525

PHP扩展与PHP版本不一致,检查lnmp系统,用phpinfo网页版检查发现php为5.4,但在系统内用php -v查结果为5.3,这个问题是编译使用了5.3的phpize和php-config导致的,
解决办法是使用5.4的phpize编译带地址参数(5.4的php-config)
[root@li745-70 opencc4php]# find / -name phpize
/root/lnmp1.2-full/src/php-5.4.41/scripts/phpize
/usr/bin/phpize –>5.3
/usr/local/php/bin/phpize –>5.4

[root@li745-70 opencc4php]# find / -name php-config
/root/lnmp1.2-full/src/php-5.4.41/scripts/php-config
/usr/bin/php-config –>5.3
/usr/local/php/bin/php-config –>5.4

删除版本不对的扩展文件,删除opencc4php重新操作
git clone https://github.com/NauxLiu/opencc4php.git –depth 1
cd opencc4php
/usr/local/php/bin/phpiz
./configure –with-php-config=/usr/local/php/bin/php-config
make && sudo make install

lnmp restart 成功

发表评论

邮箱地址不会被公开。 必填项已用*标注