gpt4 book ai didi

c++ - PHP-CPP C++ 扩展找不到正则表达式

转载 作者:行者123 更新时间:2023-11-28 06:38:45 24 4
gpt4 key购买 nike

<分区>

我正在为 PHP 编写 C++ 扩展,并且在我的代码中使用正则表达式。这是一个片段

#include <phpcpp.h>
#include <regex>
#include <iterator>
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <stdio.h>

using namespace std;

Element* parse(std::sregex_iterator iterator, std::sregex_iterator iteratorEnd)
{
string segmentContent = "";
// Segment* segment = nullptr;

while (iterator != iteratorEnd)
{
// segment = readSegment(iterator->str());

++iterator;
}

return nullptr;
};

Php::Value parseFromFile(Php::Parameters &params)
{
string filePath = params[0];

ifstream file(filePath);

if (!file.is_open())
{
return nullptr;
}
else
{
// Read the file into a buffer
stringstream buffer;

buffer << file.rdbuf();

// We now have the buffer so we can close the file
file.close();

string regexPattern = string("some pattern here");

std::regex regexMatcher(regexPattern, regex_constants::icase);

string fileContents = buffer.str();

std::sregex_iterator iterator(fileContents.begin(), fileContents.end(), regexMatcher);
std::sregex_iterator iteratorEnd;

root = parseXml(iterator, iteratorEnd);

return Php::Object("SmartXmlParser\\XmlElement", root);
}
};

这不会编译,因为我没有包括代码的所有部分(有很多。)它在这里编译得很好,没有任何错误或警告。当我尝试运行一个使用此 C++ 代码中的任何内容的测试 php 文件时,它只是失败并给出以下错误。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20131226/myextension.so' - /usr/lib/php5/20131226/myextension.so: undefined symbol: _ZNSt14regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSsEEcSt12regex_traitsIcEEC1Ev in Unknown on line 0
PHP Fatal error: Call to undefined function parseXml() in /home/vagrant/Laravel/extensions/myextension/test.php on line 5
PHP Stack trace:
PHP 1. {main}() /home/vagrant/Laravel/extensions/myextension/test.php:0

Fatal error: Call to undefined function parseXml() in /home/vagrant/Laravel/extensions/myextension/test.php on line 5

Call Stack:
0.0023 220904 1. {main}() /home/vagrant/Laravel/extensions/myextension/test.php:0

一旦我删除了引用正则表达式类的方法和代码片段,它就可以正常运行(我可以保留 include,它仍然可以工作。)

我使用这些命令行进行编译:

g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp
g++ -shared -o myextension.so main.o -lphpcpp
cp -f myextension.so /usr/lib/php5/20131226
cp -f myextension.ini /etc/php5/cli/conf.d

由于正则表达式是 C++11 中标准库的一部分,我想我不必手动链接正则表达式,因为它会在运行时自动完成,对吧?

我是否缺少使其与 PHP 一起工作的东西?我没有公开任何正则表达式对象,它们只是在我的 C++ 代码中实现目标的一种方式。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com