2

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

它成功地创建了一个已编译的可执行文件,尽管我必须使用 -x -c 选项让它成功找到依赖项。它会在我的机器上运行,但是当我在另一台机器上尝试它时,我得到了这个错误,很明显仍然存在一些依赖关系:

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

如果这有什么不同,我会在 MacOS 10.14.1 上运行它。谢谢!

4

2 回答 2

2

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

解决方案 1

传递-xpp,并确保模块在运行中实际加载,pp用于确定要包含的模块。这可能通过在运行期间使用 LWP 发出 HTTPS 请求来实现。--xargs=...可能对此有用。

解决方案 2

传给. -M LWP::Protocol::https_ pp您还可以通过-M 'LWP::Protocol::**'获取已安装的所有协议处理程序。

解决方案 3

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

于 2020-09-28T02:43:23.350 回答
1

Net::SSLeay在 MacOS 10.14 上构建,将其链接到libssl.44.dylib您尝试运行它的 MacOS 10.12 上不存在的。

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

我现在使用以下策略:

  1. 我使用perlbrew而不是系统 perl。
  2. 对于外来依赖项,我使用自制软件而不是系统库。
  3. 我使用设置(在开发机器上)构建打包的可执行文件pp并运行生成的程序export DYLD_PRINT_LIBRARIES=YES
  4. 我检查加载的库列表/usr/local/opt//usr/local/cellar/使用pp -l /full/path/name -l ...
  5. 我重建可执行文件。

我仍然在部署之前检查目标机器,但是现在它可以正常工作的机会非常高。

于 2020-10-04T10:12:10.433 回答