ppperl编译器问题-仍然具有依赖性

问题描述

我正在尝试使用pp(perl编译器)创建一个可以独立于perl安装的库和解释器运行的应用程序。

它成功创建了一个编译的可执行文件,尽管我不得不使用-x -c选项来使其成功找到依赖项。它会在我的机器上运行,但是当我在另一台机器上尝试时,我会收到此错误,因此很明显仍然存在某些依赖性:

不支持501协议方案“ https”(未安装LWP :: Protocol :: https)

如果有任何区别,我将在MacOS 10.14.1上运行它。谢谢!

解决方法

LWP :: Protocol :: https在需要时会动态加载,因此pp无法知道默认情况下是否需要它。

解决方案1 ​​

-x传递给pp,并确保该模块实际上已在运行pp(用于确定要包含的模块)中装入。这可以通过在运行期间使用LWP发出HTTPS请求来实现。 --xargs=...可能对此有用。

解决方案2

-M LWP::Protocol::https传递到pp。您还可以传递-M 'LWP::Protocol::**'来获取已安装的所有协议处理程序。

解决方案3

use LWP::Protocol::https ();添加到脚本或包含的模块中。包括说明您为什么这样做的评论将是适当的。

,

您正在MacOS 10.14上构建Net::SSLeay,并将其链接到libssl.44.dylib,而您尝试运行它的MacOS 10.12中没有此{1>}。

我发现不得不在构建系统和测试系统之间切换以找出哪些库丢失或不兼容并需要打包,这很烦人。

我现在使用以下策略:

  1. 我使用perlbrew代替系统perl。
  2. 对于外来依赖性,我使用homebrew代替系统库。
  3. 我使用pp构建打包的可执行文件,并在开发机器上设置了export DYLD_PRINT_LIBRARIES=YES的情况下运行生成的程序
  4. 我检查已加载库的列表,并使用/usr/local/opt/添加在自制目录树中引用的所有库(在我的情况下为/usr/local/cellar/pp -l /full/path/name -l ...
  5. 我重建可执行文件。

在部署之前,我仍然要检查目标计算机,但是现在它很有用了。