Erlang安装时加载openssl的libcrypto.a失败,执行crypto:start()报错的解决方案
2014-03-12 10:31
260 查看
转载请注明出处,原文链接:http://blog.csdn.net/zhongruixian/article/details/21076405
两个多月前写过一篇关于这个问题的文章:Erlang的crypto模块与最新的openssl动态链接库不兼容的问题与解决方案
由于写得比较简略,很多同学还是很纠结这个问题,所以在此补充一下具体的操作过程,希望对同学们有帮助!
错误信息:
解决办法:
1、下载openssl源码
wget http://www.openssl.org/source/openssl-1.0.1f.tar.gz
tar zxvf openssl-1.0.1f.tar.gz
2、进入源码目录,如果不是新下载解压的目录,而且以前有编译安装过的,进入目录后执行make clean以确保能重新编译
cd openssl-1.0.1f
3、为了不要和已安装的openssl混淆,这里指定一个新的安装目录
./config --prefix=/opt/ssl
4、config之后,会生成Makefile,打开Makefile找到gcc,在CFLAG参数列表里加上-fPIC
vim Makefile
5、编译并安装
make && make install
6、现在进入你的erlang源码安装目录,如果已经编译安装过erlang,为确保能重新编译,先执行:
make clean
7、加上openssl安装路径重新configure,如果有安装多个版本的erlang,为了可以方便找到新安装的erl,这里可以指定一个新的安装目录,示例如下:
./configure --with-ssl=/opt/ssl/ --prefix=/opt/erlang
8、编译并安装
make && make install
9、运行刚才安装的erlang
/opt/erlang/bin/erl
10、小结
很多同学根据我上一篇文章重装后仍然失败的原因,常见的有如下几个:
1、加-fPIC参数重装openssl后,不明确新编译出来的静态库libcrypto.a在哪里,如果以前有安装过的,不明确是否被覆盖;
2、对于已经编译安装过的源码目录,没有执行make clean;
2、重装erlang时,没有具体指定最新安装的ssl目录;
3、重装erlang后,直接执行erl时,仍然执行了老的erl,可以加上完整路径执行erl尝试,用whereis erl查看一下默认执行路径。
两个多月前写过一篇关于这个问题的文章:Erlang的crypto模块与最新的openssl动态链接库不兼容的问题与解决方案
由于写得比较简略,很多同学还是很纠结这个问题,所以在此补充一下具体的操作过程,希望对同学们有帮助!
错误信息:
Eshell V5.10.3 (abort with ^G) 1> crypto:start(). ** exception error: undefined function crypto:start/0 2> =ERROR REPORT==== 12-Mar-2014::17:09:15 === Unable to load crypto library. Failed with error: "load_failed, Failed to load NIF library: '/usr/local/lib/erlang/lib/crypto-3.1/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'" OpenSSL might not be installed on this system. =ERROR REPORT==== 12-Mar-2014::17:09:15 === The on_load function for module crypto returned {error, {load_failed, "Failed to load NIF library: '/usr/local/lib/erlang/lib/crypto-3.1/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'"}}
解决办法:
1、下载openssl源码
wget http://www.openssl.org/source/openssl-1.0.1f.tar.gz
tar zxvf openssl-1.0.1f.tar.gz
2、进入源码目录,如果不是新下载解压的目录,而且以前有编译安装过的,进入目录后执行make clean以确保能重新编译
cd openssl-1.0.1f
3、为了不要和已安装的openssl混淆,这里指定一个新的安装目录
./config --prefix=/opt/ssl
4、config之后,会生成Makefile,打开Makefile找到gcc,在CFLAG参数列表里加上-fPIC
vim Makefile
CC= gcc CFLAG= -fPIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
5、编译并安装
make && make install
6、现在进入你的erlang源码安装目录,如果已经编译安装过erlang,为确保能重新编译,先执行:
make clean
7、加上openssl安装路径重新configure,如果有安装多个版本的erlang,为了可以方便找到新安装的erl,这里可以指定一个新的安装目录,示例如下:
./configure --with-ssl=/opt/ssl/ --prefix=/opt/erlang
8、编译并安装
make && make install
9、运行刚才安装的erlang
/opt/erlang/bin/erl
Eshell V5.10.3 (abort with ^G) 1> crypto:start(). ok 2>
10、小结
很多同学根据我上一篇文章重装后仍然失败的原因,常见的有如下几个:
1、加-fPIC参数重装openssl后,不明确新编译出来的静态库libcrypto.a在哪里,如果以前有安装过的,不明确是否被覆盖;
2、对于已经编译安装过的源码目录,没有执行make clean;
2、重装erlang时,没有具体指定最新安装的ssl目录;
3、重装erlang后,直接执行erl时,仍然执行了老的erl,可以加上完整路径执行erl尝试,用whereis erl查看一下默认执行路径。
相关文章推荐
- Erlang安装时加载openssl的libcrypto.a失败,执行crypto:start()报错的解决方案
- Windows系统MySQL卸载后安装start service失败解决方案
- mysql 安装失败 start service执行不下去
- 小白笔记----------- 执行 hadoop checknative 报错 openssl: false Cannot load libcrypto.so
- apache 在 加载openssl 模块时出现 “/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value”错误解决方案
- Erlang的crypto模块与最新的openssl动态链接库不兼容的问题与解决方案
- 执行 hadoop checknative 报错 openssl: false Cannot load libcrypto.so
- Erlang的crypto模块与最新的openssl动态链接库不兼容的问题与解决方案
- Ubuntu12.04 用MentoHUST认证上网提示“打开libnotify失败,请检查是否已安装该库文件”解决方案
- [INS-30131] 执行安装程序验证所需的初始设置失败。
- UpdateDriverForPlugAndPlayDevices在64位操作系统执行失败解决方案
- 解决方法:对性能监视器计数器注册表值执行系统配置检查失败。有关详细信息,请参阅自述文件或 SQL Server 联机丛书中的“如何在 SQL Server 2005 中为安装程序增加计数器注册表项值”
- Android 开发:加载未安装apk图标-拔出U盘导致进程被杀的解决方案
- 转载win7(windows7旗舰版)声卡High Definition Audio驱动不能安装(安装失败)解决方案
- 安装,卸载或重装Vmware Workstation时失败的官方解决方案
- Android自动化测试 - Robotium之re-sign.jar重签名后安装失败提示Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]解决方案
- [nodejs]国内npm安装nodejs modules失败的几个解决方案
- 解决oracle12c安装报“[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置)”方法
- libcrypto.so.1.0.0: cannot open shared object file: No such file or directory解决方案
- Nginx 做代理服务器时浏览器加载大文件失败 ERR_CONTENT_LENGTH_MISMATCH 的解决方案