perl “在configure第473行的标量chomp中使用未初始化的值$prop_value”OpenDDS配置

41ik7eoe  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(270)

我正在尝试使用Windows 11和Visual Studio 2022配置OpenDDS库。
我通过Visual Studio命令提示符运行配置文件,并收到以下错误。

Downloading ACE+TAO 2.2a with latest patches
Extracting archive ACE+TAO-2.2a_with_latest_patches_NO_makefiles.zip
Use of uninitialized value $prop_value in scalar chomp at configure line 473.
Couldn't get submodule.tools/rapidjson.openddsConfigureCommit from .gitmodules
Stopped at configure line 475.
ERROR: configure failed with errorcode 1

configure.cmd文件包含以下代码

@echo off
:: Win32 configure script wrapper for OpenDDS
:: Distributed under the OpenDDS License.
:: See: http://www.opendds.org/license.html

for %%x in (perl.exe) do set PERLPATH=%%~dp$PATH:x
if "x%PERLPATH%"=="x" (
  echo ERROR: perl.exe was not found.  This script requires Perl.
  exit /b 1
)
set PERLPATH=
perl configure %*
if %ERRORLEVEL% NEQ 0 (
  echo ERROR: configure failed with errorcode %errorlevel%
  exit /b %errorlevel%
)
if exist setenv.cmd call setenv.cmd

我相信这里的perl配置文件是https://github.com/objectcomputing/OpenDDS/blob/master/configure
我交叉引用了这个问题"Use of uninitialized value in scalar chomp" in Perl,但不幸的是,我没有用Perl编写代码,所以我不知道如何解决这个问题。

3npbholx

3npbholx1#

这是关于一个管道文件句柄,它无法读取它应该读取的内容,正如你链接的代码中所描述的那样。第473行位于这个相对简短的子例程中:

sub git_submodule_prop {
  my $path = shift;
  my $prop_name = shift;
  my $full_prop_name = "submodule.$path.$prop_name";
  open(my $fd, "-|", "git config --file .gitmodules --get $full_prop_name")
    or die("git_submodule_prop open failed: $!\nStopped");
  my $prop_value = <$fd>;
  close($fd);
  chomp($prop_value);
  if (!$prop_value) {
    die("Couldn't get $full_prop_name from .gitmodules\nStopped");
  }
  return $prop_value;
}

该错误消息没有特别值得注意的内容,只是函数chomp用于未定义的值。“真实的的”错误消息出现在它的下面:

Couldn't get submodule.tools/rapidjson.openddsConfigureCommit from .gitmodules
Stopped at configure line 475.

在代码中,您可以看到它试图打开一个到git进程的管道,该进程显然确实打开了(因为它没有死在那里),但随后没有从文件句柄中读取任何内容

my $prop_value = <$fd>;

然后导致代码死亡。

if (!$prop_value) {
    die("Couldn't get $full_prop_name from .gitmodules\nStopped");
  }

也许您需要调查的是为什么git进程没有从管道中读取任何内容。

pw9qyyiw

pw9qyyiw2#

就像@TLP提到的https://stackoverflow.com/a/74026678/8869703一样,它确实是git的一个失败。
来自OpenDDS的压缩文件不包含git包,所以我不能依赖来自https://opendds.org/downloads.html的文件。
我按照下面的步骤,我发现从评论@simpsont-oci这里https://github.com/objectcomputing/OpenDDS/discussions/3784

  • git clone https://github.com/objectcomputing/OpenDDS.git
  • 在OpenDDS文件夹中-〉git submodule init
  • git submodule update
  • 通过VS命令行configure

这对我很有效。

相关问题