php扩展由SWIG未加载

php extension made from SWIG not loading

本文关键字:加载 SWIG 扩展 php      更新时间:2023-10-16

我正在制作一个共享库,可以在PHP中使用SWIG的帮助。该库基于一些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,然后用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脚本从命令行我得到相同的,如果这种情况下是No:

<?php 
echo "STARTn";
if (extension_loaded("prq")) echo "YESn";
else echo "NOn";
echo "ENDn";
?>

那么我现在该去哪里呢?不知道为什么php不加载扩展。什么好主意吗?

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

    cd/etc/php5/mods-available
  1. sudo vim prq.ini
  2. 在上面的文件
  3. 中添加了扩展指令
  4. sudo php5enmod prq然后加载扩展。