Nieoficjalne
Na tej stronie
  1. 01Gdzie wystąpił błąd
  2. 02Odczytaj log przepisu
  3. 03Znajdź przyczynę
  4. 04Co możesz zmienić
  5. 05Zmień źródło przepisu samodzielnie
  6. 06Zbuduj ponownie
  7. 07Kiedy kompilacja kończy się pomyślnie, ale program się nie uruchamia

Gdy kompilacja w App Builder się nie powiedzie: odczytaj log, znajdź przyczynę i zbuduj ponownie

Aplikacja w App Builder buduje programy kolejno na podstawie przepisów. Jeden z nich może się nie skompilować. Ten poradnik opisuje rzeczywisty błąd na testowym NAS-ie: TurboShell, aplikacja z 70 przepisami, zatrzymała się na siódmym — powłoce Korn ksh93.

  1. Miejsceprzepis, który zawiódł
  2. Logjego ostatnie wiersze
  3. Przyczynaco wskazuje błąd
  4. Zmianapoprawiony przepis lub aplikacja
  5. Odbudowawykorzystuje udane przepisy

Zrzuty ekranu pochodzą z Bucket & Code Server IDE 1.0.0-49, sprzed poprawki i po niej.

01Gdzie wystąpił błąd

Nieudana kompilacja nie zmienia działającej aplikacji. Jeśli wcześniejsza kompilacja się udała, przyciski Aktywuj, Pobierz i Eksportuj jako QPKG nadal korzystają z jej wyniku. Pasek boczny oznacza ostatnią kompilację jako nieudane, a strona aplikacji pokazuje błąd w potoku.

Pasek boczny aplikacji: TurboShell, ostatnia kompilacja nieudanaPotok: Budowanie, Nieudane; poprzednia udana kompilacja została zachowana

Karta Kolejność budowania wskazuje przepis i etap, na którym wystąpił błąd. W tym przykładzie wcześniejsze przepisy mają status test zaliczony; a późniejsze mają status nieosiągnięty i zachowują log z poprzedniej kompilacji.

Karta Kolejność budowania: ostatnia kompilacja nieudana; komunikat „builder: FAILED ksh93 in build (exit 1)”; przepisy 1–6 przeszły, ksh93 zawiódł podczas kompilacji, a fish nie został uruchomiony i ma wcześniejszy log

02Odczytaj log przepisu

Przycisk Log w wierszu przepisu otwiera zapis jego etapów, wyjście kompilatora, audyt i kontrolę. Przyczyny szukaj blisko końca.

Log ksh93: w libast/misc/magic.c błąd „unknown type name Magic_t; did you mean magic_t”; następnie mamake kończy tworzenie magic.o kodem 1, a pakowanie zgłasza błąd make
  • Log zadania kompilacji (Zadania w dolnym panelu, Ctrl+J) kończy się tymi samymi wierszami, bo narzędzie budujące kopiuje do niego ostatnie 40 wierszy logu przepisu.
  • Pliki robocze nieudanego przepisu zostają do następnej kompilacji w folderze kompilacji aplikacji: apps/<app>/build/work/<recipe> w folderze danych. Otwórz ten folder w terminalu edytora i sprawdź źródła oraz wygenerowane pliki.

03Znajdź przyczynę

Kompilator szuka typu Magic_t, którego używa ksh, i podpowiada magic_t, typ z biblioteki libmagic (używa jej polecenie file). To znaczy, że #include <magic.h> w źródłach ksh trafił na nagłówek libmagic zamiast na nagłówek ksh.

TurboShell buduje też przepis file, który instaluje w prefiksie aplikacji nagłówek libmagic magic.h. Katalog include tego prefiksu jest na ścieżce wyszukiwania każdego przepisu, żeby programy widziały wcześniej zbudowane biblioteki. Pierwsza kompilacja TurboShell zbudowała ksh93 przed file i się udała. Kolejna kompilacja zaczyna od kopii ostatniej udanej wersji, a w jej prefiksie był już nagłówek libmagic, który ksh93 dołączył przez pomyłkę.

Gdy błąd podaje konkretną nazwę, sprawdź, skąd ona pochodzi: ze źródeł, z wcześniejszych przepisów czy ze środowiska kompilacji. Log pokazuje, gdzie kompilacja się zatrzymała, ale sam nie mówi, która zmiana ją naprawi.

04Co możesz zmienić

  • Poprawiony przepis. Między wydaniami pakietu nowe przepisy trafiają na NAS jako podpisany katalog. Karta Biblioteka przepisów na stronie Aplikacje pokazuje używaną wersję i datę ostatniego sprawdzenia, a przycisk Sprawdź aktualizacje przepisów sprawdza od razu. Poprawiony przepis ksh93 jest w katalogu 2026.10.08-1 i oddziela ksh93 od nagłówków w prefiksie. Karta Biblioteka przepisów: używany katalog 2026.10.08-1, ostatnia kontrola zakończona pomyślnie oraz przyciski Sprawdź aktualizacje przepisów i Użyj biblioteki z pakietu
  • Aplikacja. Przycisk Zmień na stronie aplikacji pozwala dodać lub usunąć przepisy oraz ustawić środowisko i tryb linkowania. Program kolidujący z innym przepisem można przenieść do osobnej aplikacji.
  • Środowisko. Jeśli przepis wymaga nowszego kompilatora albo brakującego narzędzia, wybierz inne środowisko przez Zmień.

05Zmień źródło przepisu samodzielnie

Gdy poprawiony przepis jeszcze nie dotarł albo program ma nowsze wydanie niż to, które buduje przepis z biblioteki, możesz wskazać nowe źródło we własnej kopii przepisu. Kopię zapisujesz w folderze recipes/ dowolnego swojego projektu. Aplikacja, która bierze przepisy z tego projektu, buduje wtedy kopię zamiast przepisu z biblioteki. Biblioteka i pozostałe aplikacje się nie zmieniają. W bibliotece Bucket & Code Server IDE 1.0.0-55 przepis tmux buduje wersję 3.7c; kopia w tym przykładzie buduje 3.8.

Log zadania kompilacji podaje używaną bibliotekę w wierszu recipe library:. Własna biblioteka pakietu to /usr/bin/bucketvs/share/bucketvs/recipes/; biblioteka z podpisanego katalogu jest w recipes/current/library/ w folderze danych. W terminalu edytora, w folderze projektu, skopiuj stamtąd folder przepisu i oblicz sha256 nowego archiwum:

mkdir -p recipes
cp -r /usr/bin/bucketvs/share/bucketvs/recipes/tmux recipes/
curl -fsSL https://github.com/tmux/tmux/releases/download/3.8/tmux-3.8.tar.gz | sha256sum
e79c699c7e949dccd0a4a125e17b8d1261e311b16979dbc8eb34542f3966d82e  -

W pliku recipes/tmux/recipe.json zmień trzy wartości: wersję, adres i sha256.

"version": "3.8",
"source": {
  "url": "https://github.com/tmux/tmux/releases/download/3.8/tmux-3.8.tar.gz",
  "sha256": "e79c699c7e949dccd0a4a125e17b8d1261e311b16979dbc8eb34542f3966d82e"
},
  • Po zapisaniu pliku przepisy projektu są sprawdzane, a uwagi pojawiają się w widoku Problemy edytora. To samo sprawdzenie w terminalu wykonuje bvs recipe lint .. Karta Przepisy w widoku projektu oznacza kopię napisem zastępuje wersję 3.7c z biblioteki. Kopia z błędem zostaje pominięta, ale przepis z biblioteki nie zajmuje jej miejsca: kompilacja, która potrzebuje tmux, zatrzymuje się przed startem i podaje powód.
  • Na stronie aplikacji okno Zmień pokazuje pole Przepisy z projektu, gdy jakiś projekt ma przepis. Wybierz projekt, naciśnij Zapisz zmianę, a potem Zbuduj ponownie. Log zadania kompilacji wymienia przepisy wczytane z projektu i podaje tmux replaces the library's tmux 3.7c in this app.
  • Wydanie, które buduje się tak samo, potrzebuje tylko tych trzech wartości. Jeśli wymaga innych opcji configure albo łatki, zmień też build.sh; ten plik opisuje Twój pierwszy własny przepis.
  • Kopia zastępuje przepis z biblioteki o tej samej nazwie, bez względu na wersję. Gdy przepis w bibliotece dostanie nowszą wersję niż kopia, aplikacja nadal buduje kopię. Wtedy ustaw Przepisy z projektu z powrotem na Brak: tylko biblioteka albo usuń kopię.

06Zbuduj ponownie

Przycisk Zbuduj ponownie na stronie aplikacji rozpoczyna nowe zadanie. Jeśli pliki aplikacji nie zmieniły się od nieudanej kompilacji, budowanie rusza od miejsca, w którym stanęło: gotowe przepisy zostają, a przepis, który się nie udał, buduje się od nowa. W tym przykładzie ksh93 buduje się już z poprawką z katalogu.

Potok po ponownej kompilacji: Budowanie, ZbudowanoKarta Kolejność budowania po ponownej kompilacji: ksh93 i fish zakończone pomyślnie

07Gdy kompilacja kończy się pomyślnie, ale program nie uruchamia się

Zanim nowa kompilacja zastąpi aplikację, każde budowanie sprawdza przepisy i analizuje pliki wykonywalne oraz biblioteki, bez uruchamiania ich. Karta Zależności pokazuje wykryte problemy: brakującą bibliotekę, brak wersji symbolu, RUNPATH prowadzący poza aplikację lub program wymagający nowszego glibc niż docelowe środowisko. Przy uwagach, które panel rozpoznaje, proponuje rozwiązanie, często jako przycisk: Dodaj … i zbuduj, Przełącz na … i zbuduj, Popraw RUNPATH, Wybierz inne środowisko lub Zbuduj tylko dla tego NAS-a. Na NAS-ie bvs deps <app> wypisuje tę samą listę.