近日发现了一个很有用的PHP扩展,它可以让PHP直接执行C代码,无需编译。

TCC(Tiny C Compiler)是一个C编译器,支持直接执行C源代码。

刚开始在32位Ubuntu下安装,很顺利就装了,不过在64位CentOS上安装时却遇到很多错误,花了差不多半天的时间终于搞定了。

下面详细讲一下我在64们CentOS上安装tcc 的 php扩展中遇到的问题以及解决办法

一、安装TCC编译器

注意不要直接从官网那里下载源码,那里的代码在make编译完,执行make test 时会报错,如下:

需要直接从版本库中下载已经修复此错误的版本,可以下载最新的

wget http://repo.or.cz/w/tinycc.git/snapshot/f98c2306a0857ad3f8800f91e0554a27adc7f675.tar.gz

tar -zxvf f98c2306a0857ad3f8800f91e0554a27adc7f675.tar.gz

cd tinycc

./configure --prefix=/usr

我下载的文件是2012-04-18日提交的版本,命令如下:

下面我们要编辑一下Makefile文件,不然后面安装php_tcc模块时编译会无法通过

vim Makefile

找到 ”libtcc.a: $(LIBTCC_OBJ)“ 所在行的上一行

代码应该是

$(CC) -o $@ -c $< $(NATIVE_DEFINES) $(CFLAGS)

将这一行的最后加上 "-fPIC”,即改为

$(CC) -o $@ -c $< $(NATIVE_DEFINES) $(CFLAGS) -fPIC

保存退出

make

中间可能会报 make: texi2html: Command not found

这个是生成html帮助文档的,可以忽略,需要的话可以先安装 texi2html 然后重新make

yum install texi2html

没有make错误就继续执行下面命令

make test

make install

二、安装PHP TCC 模块

直接使用pecl进行安装

如果没有安装pecl 可以先使用 yum install php-pear 进行安装

pecl install tcc

会出现如下提示

Failed to download pecl/tcc within preferred state "stable", latest release is version 0.1.2, stability "devel", use "channel://pecl.php.net/tcc-0.1.2" to install

意思就是说现在没有稳定版本,只提供开发版,需要手动指定网址进行下载

pecl install channel://pecl.php.net/tcc-0.1.2

安装正确的话会有如下不提示

Build process completed successfully

Installing '/usr/lib64/php/modules/tcc.so'

install ok: channel://pecl.php.net/tcc-0.1.2

configuration option "php_ini" is not set to php.ini location

You should add "extension=tcc.so" to php.ini

如果make时报了如下错误,请返回第一步,确认是否加了"-fPIC“编译参数,并且加的位置正确

cc -shared .libs/tcc.o -ltcc -Wl,-soname -Wl,tcc.so -o .libs/tcc.so

/usr/bin/ld: /usr/lib/libtcc.a(libtcc.o): relocation R_X86_64_32 against `a local symbol'

can not be used when making a shared object; recompile with -fPIC

/usr/lib/libtcc.a: could not read symbols: Bad value

collect2: ld returned 1 exit status

make: *** [tcc.la] Error 1

ERROR: `make' failed

如果没有错误,继续执行下面操作

这时只要在php.ini中添加一行扩展加载项就可以了

位置任意,不过最好还是跟其他extension放在一起,方便管理

extension=tcc.so

也有可能你的扩展加载不在php.ini中配置,而是/etc/php.d/下面的单独文件来配置,这种情况你只在这个目录新建个文件,如tcc.ini

内容就是上面那一行,保存即可。

然后检查扩展是否已经加载成功

php -m

检查是否有tcc一项

有的话就大功告成,扩展已经正确安装

注:如果你是在浏览器下使用phpinfo()测试,请记得先重启webserver,这样对php.ini的修改才能正式生效

三、测试扩展

PHP代码里直接执行C代码字符串的例子

保存如下文件,并在命令行下执行

$buf = 'int main(){printf("hello world"); return 0;}';

$tcc = tcc_new();

$ret = tcc_compile_string($tcc, $buf); $ret = tcc_run($tcc);

?>

上面代码会输出

hello world

PHP代码里直接执行C源文件的例子

$tcc = tcc_new();

$ret = tcc_add_file($tcc, 'hello.c');

tcc_run($tcc);

?>

hello.c 内容

int main()

{

printf("hello world\n");

return 0;

}

注:如果hello.c 有包含头文件如 #include ,执行时会报错

还没有仔细研究,可以下载源码,里面的tests目录下有一些示例

pecl download channel://pecl.php.net/tcc-0.1.2

tcc php,64位Linux环境安装PHP TCC 扩展方法相关推荐

  1. php+tcc,64位Linux环境安装PHP TCC扩展方法

    近日发现了一个很有用的PHP扩展,它可以让PHP直接执行C代码,无需编译.TCC(Tiny C Compiler)是一个C编译器,支持直接执行C源代码. 关于TCC的介绍这里不多说,刚开始在32位Ub ...

  2. 64位装32位oracle软件,在64位linux下安装32位oracle软件

    在某些情况下,有时我们需要在64位的系统下来安装32的oracle软件(如,客户的变态要求).虽然在理论上,这种方式是可行的,但在实际的安装过程中确往往是错误百出,为了避免不必要的错误,也为了方便以后 ...

  3. 64位linux下安装ps模拟器ePSxe

    早就想在爱机上玩ps游戏,特别是彩京的1945一代和非常经典的实况足球2002版.在ubuntu64位下可以通过wine模拟的方式运行windows版的ePSxe,但是总觉得差些呢?非原生啊!网上搜了 ...

  4. Linux安装软件的注意事项,64位Linux下安装软件注意事项

    执行到./configure --enable-shared一步时提示: checking host system type... Invalid configuration `x86_64-unkn ...

  5. 64位Linux下安装mysql-5.7.13-linux-glibc2.5-x86_64 || 转载:http://www.cnblogs.com/gaojupeng/p/5727069.html

    由于公司临时让将Oracle的数据移植到mysql上面,所以让我在公司服务器上面安装一下mysql.下面就是我的安装过程以及一些错误解决思路.其实对于不同版本安装大体都有差不多. 1. 从官网下载 m ...

  6. [Linux 使用(2)] 64位Linux下安装jboss-as-7.1 以及jdk1.7

    一.软件的下载 jdk下载地址:     http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260. ...

  7. weblogic 64位 linux,weblogic在linux和window下的安装

    weblogic在linux和window下的安装 Windows server2008 一直下一步没什么坑 centos6.5 使用rpm安装jdk8 安装jdl rpm -ivh jdk-8u19 ...

  8. [Linux] 解决Ubuntu12.10 64位google chrome安装Flash后出现couldn‘t load plug-in的问题;

    [Linux] 解决Ubuntu12.10 64位google chrome安装Flash后出现couldn't load plug-in的问题: 参考文章: (1)[Linux] 解决Ubuntu1 ...

  9. centos 64位linux系统下安装appt(只有32位)命令的apktool工具包的笔记

    centos 64位linux系统下安装appt命令的apktool工具包的笔记,有需要的朋友可以参考下. 首先,安装apktool包 1. wget http://android-apktool.g ...

最新文章

  1. Java知识系列 -- 反射
  2. 富友电子商务系统的四大优势助网商轻松赚钱
  3. 剑指offer06.从尾到头打印链表
  4. RTMPdump使用相关
  5. fpga初始化错误_FPGA低温启动失败
  6. 单因素方差分析graphpad_python单因素方差分析实例
  7. java删除图片杂色_PS中级教程!手把手教你绘制霸气酷炫的暗黑3壁纸
  8. LCD/LED驱动芯片(IC)/触摸IC资料汇总,仅供大家选型参考
  9. html动态生成表格源码,JavaScript动态生成表格的示例
  10. 随机森林分类+随机森林回归+实例:用随机森林回归填补缺失值+机器学习调参思想+实例:随机森林在乳腺癌数据上的调参
  11. 同相加法器电路图_反相加法器电路图_运放加法器电路图解析
  12. 脑皮质算法(3)-- 新皮层的位置:利用皮层网格细胞的感觉运动物体识别理论
  13. java graphics2d旋转_JAVA用Graphics2D实现图片旋转,缩放,合成
  14. 滚动(scroll)操作的应用
  15. C1认证学习笔记2--计算机通识
  16. 家里Wifi网速突然变慢,一招瞬间提速
  17. 金融数据分析 实验四 金融风险价值计算
  18. ctfshow 爆破 web21-web28
  19. 四川子苗电商:抖音直播安心购怎么解约?
  20. office2016 下载直通车

热门文章

  1. iOS动画进阶(十四)图像IO
  2. “委身”吉利:魅族真的无力回天了吗?
  3. 2018年最新Vue从基础入门到项目实战视频教程网盘学习地址
  4. 电力监控系统对微机保护的数据进行实时监测
  5. 科学家用钻石存储数据,未来婚纱照将可被存储在钻戒中
  6. 就业关注:“80年代大学生”的十大职场尴尬
  7. killall命令详解
  8. 国庆充电:从容器到容器云,什么才是Kubernetes的本质?
  9. Android App应用之提交到各大市场渠道
  10. xp 无法关闭计算机,XP电脑关机关不了怎么办?电脑无法关机?