Я делаю общую библиотеку, которую я могу использовать в 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"
Далее нужно выполнить его, затем скомпилировать его с помощью g ++ и, наконец, связать все вместе:
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 не загружает расширение. Есть идеи?
Я удалил директиву расширения из php.ini и вместо этого сделал следующее:
Других решений пока нет …