php扩展由SWIG未加载
php extension made from SWIG not loading
我正在制作一个共享库,可以在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 sudo vim prq.ini
- 在上面的文件 中添加了扩展指令
- sudo php5enmod prq然后加载扩展。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 保存/加载大量短数组到二进制文件
- 使用 SDL2 和SDL_image C++加载图像
- 无法使用加载库卸载注入的 dll (C++)
- 是否有原子加载非原子值的函数?
- 加载使用 SWIG 制作的 php 扩展时未定义的符号
- php扩展由SWIG未加载
- SWIG:仅使用标头和共享库包装Perl的C++,无法找到可加载对象错误