2009-01-22 115 views
2

我试图编译我的Linux共享对象的php接口,我设法使用swig的输出来编译所有正确的,但是当我尝试加载,所以它抱怨丢失的符号:编译swig接口后缺少符号

error: undefined symbol: zend_register_long_constant 

现在我看了一下zend,它似乎是一个php框架。我想我错过了一个图书馆链接,但我不知道哪个图书馆。

任何其他人之前做过这件事,并得到它的工作?

编辑:

ldd xxxx.so 
    linux-gate.so.1 => (0xb7fdb000) 
    libcurl-gnutls.so.4 => /usr/lib/libcurl-gnutls.so.4 (0xb7f0a000) 
    libboost_date_time-gcc42-1_34_1.so.1.34.1 => /usr/lib/libboost_date_time-gcc42-1_34_1.so.1.34.1 (0xb7efb000) 
    libboost_thread-gcc42-mt-1_34_1.so.1.34.1 => /usr/lib/libboost_thread-gcc42-mt-1_34_1.so.1.34.1 (0xb7eed000) 
    libboost_filesystem-gcc42-1_34_1.so.1.34.1 => /usr/lib/libboost_filesystem-gcc42-1_34_1.so.1.34.1 (0xb7ee1000) 
    libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb7eaf000) 
    libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7e9b000) 
    librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7e92000) 
    libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7d55000) 
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d51000) 
    libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7d38000) 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7c49000) 
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7c23000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7c14000) 
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7ab5000) 
    libidn.so.11 => /usr/lib/libidn.so.11 (0xb7a83000) 
    libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0xb7a41000) 
    libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb79af000) 
    libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb798b000) 
    libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7987000) 
    libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb795c000) 
    libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0xb78bf000) 
    libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb78ad000) 
    libz.so.1 => /usr/lib/libz.so.1 (0xb7897000) 
    libgcrypt.so.11 => /lib/libgcrypt.so.11 (0xb782e000) 
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7814000) 
    /lib/ld-linux.so.2 (0xb7fdc000) 
    liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0xb7806000) 
    libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0xb77ee000) 
    libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb77e5000) 
    libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xb77e1000) 
    libgpg-error.so.0 => /lib/libgpg-error.so.0 (0xb77dc000) 
+0

加载你的PHP服务器中的zend模块,或删除对该zend函数的调用?我没有关于PHP的线索,但是这可以解决你的问题,我认为 – 2009-02-01 17:53:53

回答

1

如果你失踪时链接阶段库,你就不会得到它来编译和链接。

您能否请ldd共享对象并发布结果?

编辑:

生成时没有链接错误?我相信那里应该有一个到libphp的链接。

+0

Gah,那是对另一篇文章的评论。大声笑,ive添加您想要的信息和代表赏金以及 – Lodle 2009-02-01 06:55:31

1

从ldd输出,它看起来像你没有动态链接到libphp。这可能是Swig生成的Makefile的一个错误。

您可能想要使用正确的工具集来构建PHP扩展,而不是使用Swig。这个过程因PHP的版本而异。这通常开始于使用您正在使用的PHP发行版附带的工具'phpize' - 这会从您将要构建的一组文件创建一个骨架构建。

+0

我正在调查phpize,但它涉及更多的工作。我正在查看php源代码,并且zend代码在那里,可能会尝试将其编译到一个库中并与之链接。 – Lodle 2009-02-02 13:24:58