64位Linux/Uubuntu和openssl问题(无法读取符号:错误值)


64 bit Linux/Ubuntu and openssl issue (could not read symbols: Bad value)

通常我会搜索和阅读很多内容来解决我的问题,但对于这个特定的问题,这是非常低效的。

我正在运行一台64位的Ubuntu Linux服务器,我在该服务器上安装了LAMP堆栈,并且遇到了libcurl不支持SSL的问题,而操作系统二进制文件确实支持SSL。PHP就是无法读取它。当我在安装PHP时搜索解决方案并尝试执行以下操作以启用ssl支持时,我遇到了问题。。

./configure .... --with-openssl
...
....
/usr/bin/ld: ext/standard/.libs/info.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
ext/standard/.libs/info.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libphp5.la] Error 1

所以,它突然退出了。我试着在没有图片参数的情况下进行启用共享,但没有成功。

好的,很抱歉没有在SO中正确搜索。其中一个相关主题对这个问题有一个答案。针对本地符号';错误

我所要做的就是在配置期间重新安装openssl,并启用共享选项

./config enable-shared

然后我不得不重新安装cURL

./configure --with-ssl=/usr/local/ssl --with-zlib

然后我不得不重新安装PHP

./configure .... --with-openssl --with-curl ....

PHP cURL扩展支持SSL。

作为一个更通用的答案,当您试图编译的库正在寻找依赖项的共享库时,通常会遇到这个问题,但依赖项本身只使用静态库支持构建。

解决此问题的方法是使用共享库支持重新编译依赖项,通常通过在配置脚本中指定--enable共享标志来完成。

还执行命令

make clean