Ubuntu16.04下如何让perl Makefile.PL加载OpenSSL所需路径?
解决Ubuntu 16.04编译Net-SSLeay适配自定义OpenSSL的问题
问题核心
你遇到的问题根源有两个:
- sudo执行命令时,
~会被解析为root用户的家目录,而非当前用户的,导致路径指向错误 - 动态链接器无法找到自定义OpenSSL目录下的共享库,因为未配置
LD_LIBRARY_PATH环境变量
解决步骤
1. 替换~为绝对路径
先通过echo ~查看当前用户的家目录,比如输出为/home/ubuntu,那么自定义OpenSSL的根目录绝对路径就是/home/ubuntu/build/openssl(替换为你的实际路径)。
2. 设置动态库路径并生成Makefile
执行以下命令(替换/home/your-user为你的实际用户家目录):
sudo LD_LIBRARY_PATH=/home/your-user/build/openssl/lib OPENSSL_PREFIX=/home/your-user/build/openssl perl Makefile.PL
LD_LIBRARY_PATH:告诉动态链接器优先从指定目录加载共享库,直接解决libssl.so.1.1找不到的问题OPENSSL_PREFIX:指向OpenSSL的安装根目录,Makefile.PL会自动从该目录的include文件夹找头文件、lib文件夹找库文件,无需额外指定INC和LIBS参数
3. 编译并安装模块
编译和安装时同样需要保证动态库路径正确,避免链接错误:
sudo LD_LIBRARY_PATH=/home/your-user/build/openssl/lib make sudo make install
可选:永久配置共享库路径
如果不想每次执行命令都手动设置LD_LIBRARY_PATH,可以将自定义OpenSSL的lib目录添加到系统库路径:
- 创建系统库配置文件:
echo "/home/your-user/build/openssl/lib" | sudo tee /etc/ld.so.conf.d/openssl-custom.conf
- 更新系统库缓存:
sudo ldconfig
之后再执行编译安装命令就无需手动设置环境变量了。
内容的提问来源于stack exchange,提问作者Marnix
相关产品推荐
相关产品推荐

