首页 > 解决方案 > 来自 OpenEdge 应用程序的 perl 脚本调用导致错误:无法查找符号 boot_DynaLoader

问题描述

作为 AWS 迁移的一部分,我们在操作系统级别使用 Perl 5.16.3 在 EC2 实例(Amazon Linux 2,64 位)中托管我们的应用程序。我们创建了一个 Perl 脚本,作为 OS shell 命令调用,用于发送特定于应用程序的电子邮件。Amazon SES 将用于发送电子邮件,脚本是根据 Amazon SES 文档中提供的指南创建的。该脚本将与安装在操作系统级别的 Perl 版本一起使用,我们有“shebang”指向“/usr/bin/perl”。

我们已经通过从程序编辑器以及特定于应用程序的“sudo”用户和 root 调用相同的脚本来测试脚本。所有这些情况都有效,我们尝试从应用程序中执行相同操作,但出现错误 "/usr/bin/perl: symbol lookup error: /usr/bin/perl: undefined symbol: boot_DynaLoader" 。我们还尝试调用简单的脚本来显示来自应用程序的示例消息,但我们遇到了同样的错误。

通过分析,我们可以看到应用程序使用 OE 11.7.8 和 Perl 5.6.1。我们还尝试在从 shell 调用脚本时优先使用 PATH 以专门使用“/usr/bin”(当存在 OS 级别 Perl 时)和“/usr/lib64/perl5”(存在所需的库文件) . (设置 PATH 并在调用之前将其导出)

我们怀疑该错误是由于应用服务器调用与 OE 特定 Perl 二进制文件的某些依赖关系,我们尝试修改 shebang 以在 DLC 路径中使用 OE 特定 Perl,并且“boot_DynaLoader”错误已更改,我们无法使用任何特定的库文件进行此更改。我们还尝试更新 proadsv 文件中的 PATH 环境变量并重新启动所有 app/web/db/AdminServers。路径仍然重置为旧路径。

我们想知道

  1. 为什么我们不能调用特定于操作系统级别安装的 Perl 脚本?
  2. 我们能否提供一个带有 Perl 5.16.3 或最新版本的 OE 补丁?
  3. 是否可以在没有补丁及其影响的情况下更新 DLC 中的 Perl?

标签: perlopenedgeprogress-4gl

解决方案


我收到了进度支持的回复,要求更新 LD_LIBRARY_PATH 环境变量。我在脚本调用之前做了以下语句并且它有效。

export LD_LIBRARY_PATH=/usr/lib64/perl5:/usr/lib64/perl5/CORE/:/usr/share/perl5:$LD_LIBRARY_PATH

推荐阅读