do_compile из GNU Hello World завершается неудачно в простом рецепте yocto - PullRequest
0 голосов
/ 25 апреля 2020

Я написал простой рецепт, демонстрирующий функциональность класса autotools.

SUMMARY = "GNU Helloworld application"
LICENSE = "GPLv3+"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"

SRC_URI[md5sum] = "6cd0ffea3884a4e79330338dcc2987d6"
SRC_URI[sha256sum] = "31e066137a962676e89f69d1b65382de95a7ef7d914b8cb956f41ea72e0f516b"


SRC_URI = "${GNU_MIRROR}/hello/hello-2.10.tar.gz"
inherit autotools gettext

Когда я создаю этот рецепт, он терпит неудачу на этапе do_compile

ERROR: hello-2.10-r0 do_compile: oe_runmake failed
ERROR: hello-2.10-r0 do_compile: Execution of '/home/lwl/Yocto_Training/build/tmp/work/core2-64-poky-linux/hello/2.10-r0/temp/run.do_compile.35391' failed with exit code 1:
rm -f lib/configmake.h-t && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
  echo '#define PREFIX "/usr"'; \
  echo '#define EXEC_PREFIX "/usr"'; \
  echo '#define BINDIR "/usr/bin"'; \
  echo '#define SBINDIR "/usr/sbin"'; \
  echo '#define LIBEXECDIR "/usr/libexec"'; \
  echo '#define DATAROOTDIR "/usr/share"'; \
  echo '#define DATADIR "/usr/share"'; \
  echo '#define SYSCONFDIR "/etc"'; \
  echo '#define SHAREDSTATEDIR "/com"'; \
  echo '#define LOCALSTATEDIR "/var"'; \
  echo '#define RUNSTATEDIR "/var/run"'; \
  echo '#define INCLUDEDIR "/usr/include"'; \
  echo '#define OLDINCLUDEDIR "/usr/include"'; \
  echo '#define DOCDIR "/usr/share/doc/hello"'; \
  echo '#define INFODIR "/usr/share/info"'; \
  echo '#define HTMLDIR "/usr/share/doc/hello"'; \
  echo '#define DVIDIR "/usr/share/doc/hello"'; \
  echo '#define PDFDIR "/usr/share/doc/hello"'; \
  echo '#define PSDIR "/usr/share/doc/hello"'; \
  echo '#define LIBDIR "/usr/lib"'; \
  echo '#define LISPDIR "/usr/share/emacs/site-lisp"'; \
  echo '#define LOCALEDIR "/usr/share/locale"'; \
  echo '#define MANDIR "/usr/share/man"'; \
  echo '#define MANEXT ""'; \
  echo '#define PKGDATADIR "/usr/share/hello"'; \
  echo '#define PKGINCLUDEDIR "/usr/include/hello"'; \
  echo '#define PKGLIBDIR "/usr/lib/hello"'; \
  echo '#define PKGLIBEXECDIR "/usr/libexec/hello"'; \
} | sed '/""/d' > lib/configmake.h-t && \
mv -f lib/configmake.h-t lib/configmake.h
rm -f lib/arg-nonnull.h-t lib/arg-nonnull.h && \
sed -n -e '/GL_ARG_NONNULL/,$p' \
  < ../hello-2.10/build-aux/snippet/arg-nonnull.h \
  > lib/arg-nonnull.h-t && \
mv lib/arg-nonnull.h-t lib/arg-nonnull.h
rm -f lib/c++defs.h-t lib/c++defs.h && \
sed -n -e '/_GL_CXXDEFS/,$p' \
  < ../hello-2.10/build-aux/snippet/c++defs.h \
  > lib/c++defs.h-t && \
mv lib/c++defs.h-t lib/c++defs.h
rm -f lib/warn-on-use.h-t lib/warn-on-use.h && \
sed -n -e '/^.ifndef/,$p' \
  < ../hello-2.10/build-aux/snippet/warn-on-use.h \
  > lib/warn-on-use.h-t && \
mv lib/warn-on-use.h-t lib/warn-on-use.h
/home/lwl/Yocto_Training/build/tmp/hosttools/mkdir -p lib/sys
/bin/bash: line 30: lib/configmake.h-t: No such file or directory
/bin/bash: line 1: lib/arg-nonnull.h-t: No such file or directory
/bin/bash: line 1: lib/c++defs.h-t: No such file or directory
Makefile:2734: recipe for target 'lib/configmake.h' failed
make: *** [lib/configmake.h] Error 1
make: *** Waiting for unfinished jobs....
Makefile:2873: recipe for target 'lib/arg-nonnull.h' failed
make: *** [lib/arg-nonnull.h] Error 1
Makefile:2881: recipe for target 'lib/c++defs.h' failed
make: *** [lib/c++defs.h] Error 1
rm -f lib/sys/types.h-t lib/sys/types.h && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
      -e 's|@''INCLUDE_NEXT''@|include_next|g' \
      -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \
      -e 's|@''PRAGMA_COLUMNS''@||g' \
      -e 's|@''NEXT_SYS_TYPES_H''@|<sys/types.h>|g' \
      -e 's|@''WINDOWS_64_BIT_OFF_T''@|0|g' \
      < ../hello-2.10/lib/sys_types.in.h; \
} > lib/sys/types.h-t && \
mv lib/sys/types.h-t lib/sys/types.h
WARNING: exit code 1 from a shell command.

Я допустил какую-либо ошибку в рецепте?

1 Ответ

1 голос
/ 25 апреля 2020

Пожалуйста, добавьте в свой рецепт класс autotools-brokensep и повторите попытку.

inherit gettext autotools-brokensep

Если программное обеспечение, создаваемое по рецепту, не поддерживает использование сборок вне дерева, вы должны иметь рецепт наследует класс autotools-brokensep. Класс autotools-brokensep ведет себя так же, как класс autotools, но выполняет сборку с помощью B == S. Этот метод полезен, когда поддержка построения вне дерева либо отсутствует, либо не работает. [1]

это работа?

[1] https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#ref -classes-autotools

...