当我尝试让 cURL 在 PHP 上运行的时候,我在 apache 错误日志中收到此错误:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/curl.so' - /usr/lib/php5/20121212/curl.so: symbol curl_easy_pause, version CURL_OPENSSL_3 not defined in file libcurl.so.4 with link time reference in Unknown on line 0
它引用的文件位于该位置,我试图找出在为 PHP 安装 curl 时是否遗漏了任何依赖项。当我curl -V
在命令行上使用时没有错误。
我尝试过以下命令:
sudo apt-get install php5-curl
sudo apt-get update
sudo apt-get install openssl
我还尝试完全删除 php 并使用以下命令从头开始安装它:
sudo apt-get install php5-common libapache2-mod-php5 php5-cli
然后:
sudo apt-get install php5-curl
我在这里遗漏了什么?
我的软件版本:
PHP 5.5.9-1ubuntu4.2 (cli) (built: Jun 25 2014 17:17:37)
curl 7.16.0 (x86_64-unknown-linux-gnu) libcurl/7.16.0
Ubuntu 14.04
提前致谢
答案1
您的系统中安装了两个不同版本的 libcurl:
libcurl3.so
libcurl4.so
这是指向的符号链接libcurl.so.4.3.0
lrwxrwxrwx 1 root root 12 4月 1 13:43 /usr/lib/x86_64-linux-gnu/libcurl.so.3 -> libcurl.so.4 lrwxrwxrwx 1 root root 16 4月 1 13:43 /usr/lib/x86_64-linux-gnu/libcurl.so.4 -> libcurl.so.4.3.0 -rw-r--r-- 1 root root 422696 4月 1 13:43 /usr/lib/x86_64-linux-gnu/libcurl.so.4.3.0
- libcurl.so.4 的本地版本,它是指向 libcurl.so.4.0.0 的链接。
lrwxrwxrwx 1 root root 16 六月 18 09:26 /usr/local/lib/libcurl.so.4 -> libcurl.so.4.0.0 -rwxr-xr-x 1 root root 1146079 六月 18 09:26 /usr/local/lib/libcurl.so.4.0.0
这个本地库/usr/local/lib/libcurl.so.4
之前已经加载过了/usr/lib/x86_64-linux-gnu/libcurl.so.4
。我们可以看到ld 图书馆秩序使用命令strings /etc/ld.so.cache
。
正如我所看到的find / -name "*libcurl*" -exec ls -l {} \; -print
输出,你安装了一个源包libcurl-7.16.0并且/usr/local/src/curl-7.16.0/
我猜你已经编译并生成了/usr/local/lib/libcurl.so.4.0.0
。
curl_easy_pause
libcurl 中存在缺失的方法,因为7.18.0这就是我收到错误的原因,您的系统正在使用libcurl-7.16.0
。
为了修复此问题,请删除错误的 libcurl 并更新 ld.so 缓存:
sudo rm /usr/local/lib/libcurl*
sudo ldconfig -v
我建议删除/usr/local/src/curl-7.16.0
目录以防止任何其他类型的问题。