链接 PHP 扩展(符号查找错误)

链接 PHP 扩展(符号查找错误)

我理清了头脑中和服务器上的一些事情,并想重写我的问题:

我从 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'  

我认为/猜测整个过程应该是这样的:

  1. php 遇到由扩展处理的方法调用
  2. 相应的扩展方法被称为
  3. 该扩展只是一个 php 包装器(我猜)调用底层二进制文件
  4. 直到 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。

相关内容