Отсутствует символ после компиляции интерфейса Swig - PullRequest
2 голосов
/ 22 января 2009

Я пытаюсь скомпилировать интерфейс php для моего общего объекта linux, и мне удалось заставить его скомпилировать все правильно, используя вывод swig, однако, когда я пытаюсь загрузить его, он жалуется на отсутствующий символ:

error: undefined symbol: zend_register_long_constant

Теперь я посмотрел на Zend, и похоже, что это php framework. Я думаю, что мне не хватает библиотеки для ссылки, но я не знаю, какая библиотека.

Кто-нибудь еще делал это раньше и заставлял его работать?

Edit:

 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)

Ответы [ 2 ]

1 голос
/ 01 февраля 2009

Из вывода ldd похоже, что вы не подключаетесь к libphp динамически. Это может быть ошибка в сгенерированном Swig Makefile.

Возможно, вы захотите изучить использование правильного набора инструментов для создания расширений PHP вместо использования Swig. Этот процесс зависит от версии PHP. Обычно это начинается с использования инструмента «phpize», который поставляется вместе с используемым дистрибутивом PHP - он создает сборку скелета из набора файлов, из которых вы собираетесь собирать.

1 голос
/ 30 января 2009

Если бы вам не хватало библиотеки на этапе компоновки, вы бы не получили ее для компиляции и компоновки.

Не могли бы вы добавить этот общий объект и опубликовать результаты?

Edit:

Вы не получаете ошибку ссылки при сборке? Я считаю, что там должна быть ссылка на libphp.

...