【问题标题】:Simple Hello World PHP extension could not be executed无法执行简单的 Hello World PHP 扩展
【发布时间】:2014-12-31 10:14:19
【问题描述】:

我正在尝试运行简单的 Hello World PHP 扩展,但在制作和安装扩展之后以及当我想运行测试脚本时遇到以下问题:

P Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/skeleton.so' - /usr/lib/php5/20121212/skeleton.so: undefined symbol: _ZN3Php9ExtensionD1Ev in Unknown on line 0
/etc/php5/cli/conf.d/skeleton.ini

我的main.cpp 文件:

#include <phpcpp.h>
#include <iostream>

void helloWorld (Php::Parameters &params)
{
    std::string name=params[0];
    std::cout<<"Hello "<<name<<"!"<<std::endl;
}

extern "C" {

    PHPCPP_EXPORT void *get_module() 
    {
        static Php::Extension extension("skeleton", "1.0");
        extension.add("helloWorld", helloWorld);
        return extension;
    }
}

这是我的测试脚本:

<?php
echo helloWorld('Ben'); 

我受到本教程的启发:http://www.sitepoint.com/getting-started-php-extension-development-via-php-cpp/

你能帮我解决这个问题吗?提前感谢您的帮助。

【问题讨论】:

  • 您是否启用了动态扩展?您是否从 cli 运行脚本?如果你运行“php -i | grep skeleton”,你看到你的扩展加载了吗?

标签: php c++ php-extension php-cpp


【解决方案1】:

我不确定这是否是问题所在,但您应该使用:

Php::out << "Hello " << name << "!" << std::endl;

而不是

std::cout << "Hello " << name << "!" << std::endl;

std::cout 在我的扩展程序中产生了一些错误。

维尼修斯

【讨论】:

  • 谢谢,但这不是解决方案,问题仍然存在。
【解决方案2】:

在我在 PHP-CPP 的 repo 上看到这张票之前,我遇到了同样的错误:https://github.com/CopernicaMarketingSoftware/PHP-CPP/issues/180

原来我的问题是我听从了别人的建议,我应该用 PHP 源代码的内容(我从 php.net 获得)替换 /zend/ 目录(在 PHP-CPP 库中)的内容.

一旦我将/zend/ 的内容回滚到与PHP-CPP 提供的相同,问题就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-08
    • 2021-02-14
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多