由SWIG制作的php扩展未加载

时间:2015-08-19 04:03:19

标签: php c++ swig

我正在创建一个共享库,我可以在SWIG的帮助下在PHP中使用它。该库基于一些C ++代码,也可以调用fortran函数。是的,它很疯狂。我做的第一件事是创建FORTRAN子例程的共享库。我使用cmake做了这个,它生成了libmasterfile.so文件。下一部分是将c ++代码编译成对象:

g++ -O2 -g -Wall -c -fmessage-length=0 -std=c++11 -fPIC -MMD -MP -MF"Chunk.d" -MT"Chunk.d" -o "Chunk.o" "../Chunk.cpp"
g++ -O2 -g -Wall -c -fmessage-length=0 -std=c++11 -fPIC -MMD -MP -MF"MasterFile.d" -MT"MasterFile.d" -o "MasterFile.o" "../MasterFile.cpp"
g++ -O2 -g -Wall -c -fmessage-length=0 -std=c++11 -fPIC -MMD -MP -MF"Package.d" -MT"Package.d" -o "Package.o" "../Package.cpp"
g++ -O2 -g -Wall -c -fmessage-length=0 -std=c++11 -fPIC -MMD -MP -MF"Queue.d" -MT"Queue.d" -o "Queue.o" "../Queue.cpp"
g++ -O2 -g -Wall -c -fmessage-length=0 -std=c++11 -fPIC -MMD -MP -MF"Variable.d" -MT"Variable.d" -o "Variable.o" "../Variable.cpp"
之后我编写了swig共享库的接口文件:

%module prq
%{
#include "Chunk.h"
#include "ConcreteQueue.h"
#include "ConcreteRequest.h"
#include "MasterFile.h"
#include "Package.h"
#include "Queue.h"
#include "QueueFactory.h"
#include "Request.h"
#include "RequestFactory.h"
#include "Variable.h"
using namespace PRQ;
%}
%include "../Chunk.h"
%include "../ConcreteQueue.h"
%include "../ConcreteRequest.h"
%include "../MasterFile.h"
%include "../Package.h"
%include "../Queue.h"
%include "../QueueFactory.h"
%include "../Request.h"
%include "../RequestFactory.h"
%include "../Variable.h"

接下来是swig it,然后使用g ++编译swig,最后将所有内容链接在一起:

swig -c++ -php5 prq.i
g++ `php-config --includes` -std=c++11 -O2 -fPIC -c prq_wrap.cpp
g++ -shared Chunk.o MasterFile.o Package.o Queue.o Variable.o prq_wrap.o -o prq.so -L/home/jlahowetz2/development/package-request-queue/ -lmasterfile -lgfortran

所有这些似乎都能正确编译。我通过php.ini添加了扩展并重新启动了apache2。 php错误日志显示没有错误,当我看到扩展程序是否已加载时,一切似乎都很好:

php -m | grep prq

并从命令行使用php脚本我得到相同的,这种情况下是否:

<?php 
echo "START\n";
if (extension_loaded("prq")) echo "YES\n";
else echo "NO\n";
echo "END\n";
?>

那我现在去哪儿了?不确定为什么php没有加载扩展名。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我从php.ini中删除了扩展指令,而是执行如下操作:

  1. cd / etc / php5 / mods-available
  2. sudo vim prq.ini
  3. 将扩展指令添加到上述文件
  4. sudo php5enmod prq 并加载了扩展名。