it-swarm.com.ru

Кусок № 1 не удалось в 1. Что это значит?

Я получаю следующую ошибку при запуске make, и я понятия не имею, что это значит или что с этим делать. Может ли кто-нибудь осветить меня или указать мне правильное направление?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch
patching file Makefile.am
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
make: *** [dvdnav] Error 1

Я пытаюсь кросс-компиляции VLC для win32 (с помощью Linux).

53
JellicleCat

Это ошибка, сгенерированная patch. Если вы откроете файл .patch, вы увидите, что он организован в виде группы сегментов, так называемых "фрагментов". Каждый кусок идентифицирует соответствующие фрагменты кода (по номерам строк) в старой и новой версии, различия между этими фрагментами кода и сходства между ними ("контекст").

Блок может потерпеть неудачу, если сходство блока не совпадает с оригинальным файлом. Когда вы видите эту ошибку, это почти всегда, потому что вы используете патч для неправильной версии кода, который вы патчите. Есть несколько способов обойти это:

  • Получите обновленную версию libdvdnav, которая уже включает патч (лучший вариант).
  • Получите файл .patch для версии libdvdnav, которую вы исправляете.
  • Патч вручную. Для каждого блока в патче попробуйте найти соответствующий файл и строки в libdvdnav и исправьте их в соответствии с инструкциями в патче.
  • Возьмите версию libdvdnav, которая ближе к той версии, для которой был предназначен файл .patch (вероятно, плохая идея).
57
user824425

Советы по отладке

  1. Добавьте crlf в конец файла патча и проверьте, работает ли он
  2. попробуйте команду --ignore-whitespace как в: [email protected]:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch see учебник по markus
4
Ema

В некоторых случаях нет разницы в версиях файлов, а только в отступах, интервалах, концах строк или номерах строк.

Для исправления, несмотря на эти различия, можно использовать следующие два аргумента:

- ignore-whitespace: Он игнорирует различия пробелов (отступы и т. д.).

- fuzz 3: опция "--fuzz X" устанавливает максимальный коэффициент нечеткости в линии. Эта опция применяется только к контексту и унифицированным различиям; он игнорирует до X строк при поиске места для установки блока. Обратите внимание, что больший коэффициент нечеткости увеличивает вероятность создания неисправного патча. Коэффициент размытия по умолчанию равен 2; нет смысла устанавливать его больше, чем количество строк контекста в diff, обычно 3.

Не забудьте для пользователя "--dry-run": он попробует патч, не применяя его.

Пример :

patch --verbose --dry-run --ignore-whitespace --fuzz 3 < /path/to/patch.patch

Больше информации о Fuzz:

https://www.gnu.org/software/diffutils/manual/html_node/Inexact.html

1
André DS

Следуйте инструкциям здесь , это решило мою проблему.

вы должны выполнить команду, как указано ниже; patch -p0 --dry-run <путь/к/вашему/patchFile/yourPatch.patch

0
Jehangir Wahid