![链接 PHP 扩展(符号查找错误)](https://linux22.com/image/539750/%E9%93%BE%E6%8E%A5%20PHP%20%E6%89%A9%E5%B1%95%EF%BC%88%E7%AC%A6%E5%8F%B7%E6%9F%A5%E6%89%BE%E9%94%99%E8%AF%AF%EF%BC%89.png)
我理清了头脑中和服务器上的一些事情,并想重写我的问题:
我从 NetManagement 获得了两个包,均属于 nmcryptgate:
- PHP 扩展(源代码)
- 已编译的库(名为 nmcryptgate_client_1.7.16-i386-unknown-freebsdelf4.2 的 tar)
我想在我的 Debian 5.0.8 服务器上安装这些。
我 (./configure && make && make install) 成功安装了 PHP 扩展。phpinfo() 指出该扩展已启用。
创建的文件转到
/usr/lib/php5/20060613+lfs/nmcryptgate.la
/usr/lib/php5/20060613+lfs/nmcryptgate.so
我从编译库中移动了如下文件(源自 tar 内部的结构):
/usr/local/bin/nmcryptgate
/usr/local/doc/nmcryptgate/developer.txt(无帮助)
/usr/local/include/nmcryptgate.h
/usr/local/lib/libnmcryptgate.so.1
/usr/local/lib/libnmcryptgate.la
/usr/local/lib/libnmcryptgate.so(符号链接指向 libnmcryptgate.so.1)
执行此操作后,我调用了以下方法:
ldconfig
libtool --finish
但是:每当从扩展 Apache 调用方法时都会出现此错误:
/usr/sbin/apache2:符号查找错误:/usr/lib/php5/20060613+lfs/nmcryptgate.so:未定义符号:nmlistalloc
/usr/local/lib 包含在 /etc/ld.so.conf.d/libc.conf 中
/usr/lib/php5/20060613+lfs/nmcryptgate.la 内容:
# nmcryptgate.la - 一个 libtool 库文件
# 由 ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06) 生成
#
# 请不要删除此文件!
# 它是链接库所必需的。
# The name that we can dlopen(3).
dlname='nmcryptgate.so'
# Names of this library.
library_names='nmcryptgate.so nmcryptgate.so nmcryptgate.so'
# The name of the static archive.
old_library=''
# Libraries that this one depends upon.
dependency_libs=''
# Version information for nmcryptgate.
current=0
age=0
revision=0
# Is this an already installed library?
installed=yes
# Should we warn about portability when linking against -modules?
shouldnotlink=yes
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
# Directory that this library needs to be installed in:
libdir='/usr/local/lib'
#libdir='/usr/lib/php5/20060613+lfs'
/usr/local/lib/libnmcryptgate.la
# libnmcryptgate.la - 一个 libtool 库文件
# 由 ltmain.sh - GNU libtool 1.3.4 (1.385.2.196 1999/12/07 21:47:57) 生成
#
# 请不要删除此文件!
# 它是链接库所必需的。
# The name that we can dlopen(3).
dlname=''
# Names of this library.
library_names='libnmcryptgate.so.1 libnmcryptgate.so libnmcryptgate.so'
# The name of the static archive.
old_library=''
# Libraries that this one depends upon.
dependency_libs=' -L. -L/usr/ssl/lib -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto'
# Version information for libnmcryptgate.
current=1
age=0
revision=29
# Is this an already installed library?
installed=yes
# Directory that this library needs to be installed in:
libdir='/usr/local/lib'
我认为/猜测整个过程应该是这样的:
- php 遇到由扩展处理的方法调用
- 相应的扩展方法被称为
- 该扩展只是一个 php 包装器(我猜)调用底层二进制文件
- 直到 x. ...并返回到 php 脚本
我猜测第 3 步是这里的问题:扩展以某种方式找不到底层二进制库 - 只是猜测。
我说的对吗?或者有什么问题?有人能帮忙吗?
感谢大家,并致以问候,Christian
PS:刚刚重新编译了一下,发现config.log里面有错误:
config.log:/usr/bin/ld: h_errno: /lib/libc.so.6 部分 .tbss 中的 TLS 定义与 /usr/local/lib/libnmcryptgate.so 中的非 TLS 引用不匹配
我在 Makefile 中附加了 /usr/local/lib/libnmcryptgate.so
DEFAULT_INCLUDES = -include /usr/local/include/nmcryptgate.h
还是同样的错误...
答案1
您必须将 /usr/local/lib 添加到库路径。/etc/ld.so.conf.d/nmcryptgate.conf
使用以下内容创建:
/usr/local/lib
然后运行:
sudo ldconfig
再次测试 PHP。可能需要重新启动 Apache。