«Использование неинициализированного значения $prop_value в скалярном chomp в строке конфигурации 473» Конфигурация OpenDDS

Я пытаюсь настроить библиотеку OpenDDS для Windows 11 и Visual Studio 2022.

Я запустил файл конфигурации через командную строку 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

Я сделал перекрестную ссылку на этот вопрос «Использование неинициализированного значения в скалярном chomp» в Perl, но я, к сожалению, не пишу код на Perl, поэтому не знаю, как решить эту проблему.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Речь идет об дескрипторе файла канала, который не смог прочитать то, что он должен был прочитать, как описано в коде, который вы связали. Строка 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 ничего не читал из пайпа.

Автор кода, о котором идет речь здесь, я думаю, что это исправлено. Это была странная ошибка, связанная с тем, как работает Perl в Windows: github.com/objectcomputing/OpenDDS/pull/3812

Fred Hornsey 23.11.2022 20:22

@FredHornsey Хорошо, что вы все исправили, ура.

TLP 23.11.2022 23:58

Как упоминал @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

Это сработало для меня.

Другие вопросы по теме