首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对未定义函数的Php调用

对未定义函数的Php调用
EN

Stack Overflow用户
提问于 2016-08-17 09:18:01
回答 2查看 606关注 0票数 1

我正在使用php创建一个php扩展。

main.cpp

代码语言:javascript
复制
#include <phpcpp.h>
#include <iostream>

using namespace std;

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

extern "C" {

    /**
     *  Function that is called by PHP right after the PHP process
     *  has started, and that returns an address of an internal PHP
     *  strucure with all the details and features of your extension
     *
     *  @return void*   a pointer to an address that is understood by PHP
     */
    PHPCPP_EXPORT void *get_module()
    {
        static Php::Extension extension("yourextension", "1.0");
        extension.add("helloWorld", helloWorld);
        return extension;
    }
}

然后我运行$ make && sudo make install输出

代码语言:javascript
复制
make: Nothing to be done for 'all'.
cp -f yourextension.so /usr/lib/php/20151012
cp -f yourextension.ini /etc/php/7.0/cli/conf.d 

检查php配置

代码语言:javascript
复制
myname@ubuntu:~/EmptyExtension$ php -i | grep -i yourextension
/etc/php/7.0/cli/conf.d/yourextension.ini
yourextension

对我来说很好,所以我试着用helloWorld()

test.php

代码语言:javascript
复制
<?php

echo extension_loaded('yourextension'); // outputs 1 
echo helloWorld('it works');

但不起作用;)

ErrorMessage Uncaught Error: Call to undefined function helloWorld()

有什么想法吗?我使用的是ubuntu 16.04和php7.0.8

非常感谢

编辑当编译php时,我得到了下面的输出,也许已经有什么问题了?

代码语言:javascript
复制
myname@ubuntu:~/PHP-CPP$ sudo make install
mkdir -p /usr/include/phpcpp
mkdir -p /usr/lib
cp -f phpcpp.h /usr/include
cp -f include/*.h /usr/include/phpcpp
if [ -e libphpcpp.so.2.0.0 ]; then \
    cp -f libphpcpp.so.2.0.0 /usr/lib/; \
    ln -f -s /usr/lib/libphpcpp.so.2.0.0 /usr/lib/libphpcpp.so.2.0; \
    ln -f -s /usr/lib/libphpcpp.so.2.0.0 /usr/lib/libphpcpp.so; \
fi
if [ -e libphpcpp.a.2.0.0 ]; then cp -f libphpcpp.a.2.0.0 /usr/lib/; \
    ln -f -s /usr/lib/libphpcpp.a.2.0.0 /usr/lib/libphpcpp.a; \
fi
if `which ldconfig`; then \
    sudo ldconfig; \
fi

EDIT2函数看起来甚至不被导出

代码语言:javascript
复制
myname@ubuntu:~/EmptyExtension$ sudo nm -D /usr/lib/php/20151012/yourextension.so 
0000000000201060 B __bss_start
                 U __cxa_atexit
                 w __cxa_finalize
                 U __cxa_guard_abort
                 U __cxa_guard_acquire
                 U __cxa_guard_release
0000000000201060 D _edata
0000000000201130 B _end
0000000000000a6c T _fini
00000000000009c0 T get_module
                 w __gmon_start__
                 U __gxx_personality_v0
0000000000000810 T _init
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 w _Jv_RegisterClasses
                 U _Unwind_Resume
                 U _ZN3Php9Extension6moduleEv
                 U _ZN3Php9ExtensionC1EPKcS2_i
                 U _ZN3Php9ExtensionD1Ev
EN

回答 2

Stack Overflow用户

发布于 2016-08-17 12:14:25

解决这一问题的方法是删除编译后的文件,因为它们不会被$ make && sudo make install覆盖。

所以$ rm -f main.o yourextension.so && make && sudo make install在这里做了个小把戏

票数 1
EN

Stack Overflow用户

发布于 2017-04-26 05:56:01

首先,你必须正确运行它。应该运行以下命令来编译它。

  1. 制作
  2. sudo make安装
  3. 制作-B
  4. Php test.php

你必须遵循这四个步骤。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38992581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档