[РЕШЕНО] Ошибка сборки TWRP - ТОЛЬКО на Arch Linux

vasek, спасибо за инфу ( и да, знаю)
alexandr05
и да, знаю
Тогда без обид на старика ... ничего не имел в виду плохого.
Ошибки не исчезают с опытом - они просто умнеют
Вообщем почитал я об изменениях в gcc 8 - добавили много предупреждений, одно из которых "-Wstringop-truncation" (при усечении строки, копируемой через strncat, strncpy и stpncpy)
Почитать о нем можешь уже в приведенной ранее мной ссылке о предупреждениях а также и здесь

Обсуждений этого предупреждения много и рекомендуют, если уверены в правильности, отключайте его, если не уверены, правьте.
UPD - У функции strncpy есть один нюанс - наличие/отсутствие нулевого байта в конце скопированной строки (подробности можешь почитать здесь )

В части замены strncpy – memcpy заменять можно, но не везде, нужно смотреть.
А вот в части замены strncat – strcat я был не прав, этого делать не нужно.

Вообщем, раз компилировалось раньше нормально, то можно смело отключать это предупреждение
Ошибки не исчезают с опытом - они просто умнеют
Мужики, я сделал это! )) Точнее, посмотрев вот здесь - http://cppconf.ru/talks/day-2/track-c/4.pdf (самое начало страницы 16) просто тупо угадал, что делать. Точнее, ЧТО делать, более-менее было ясно - просто сменить компилятор с gcc8 на gcc7. А вот КАК это сделать - больше угадал, чем прочитал.

Итак, РЕШЕНИЕ:

1) sudo pacman -S gcc7
2) Приводим Makefile в корне исходников к такому виду:

### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###

CPPFLAGS += -iquote.. -Iinclude
CXXFLAGS += -std=c++11 -O3 -Wall # -Werror
LDLIBS += -lbz2 -lz

.PHONY: all clean

all: imgdiff libimgpatch.a

clean:
	rm -f *.o imgdiff libimgpatch.a

imgdiff: imgdiff.o bsdiff.o utils.o
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDLIBS) -o $@ $^

libimgpatch.a utils.o: CXXFLAGS += -fPIC
libimgpatch.a: imgpatch.o bspatch.o utils.o
	${AR} rcs $@ $^

- то есть закомментирываем (или "закомментировываем"?...) -Werror

3) nano .../папка_с_исходниками/CMakeLists.txt

- прописываем там такой текст:

cmake_minimum_required(version 3.5)
set(cmake_c_compiler gcc-7)
set(cmake_cxx_compiler g++-7)
project(cmake_test)

4) Теперь главное (кто в теме сборки TWRP, тот понимает смысл первых двух команд):

. build/envsetup.sh
lunch omni_device_name-eng
make -j3 recoveryimage CXX=g++-7 CC=gcc-7

- вот в этих последних двух флагах и заключается весь смысл!

Результат - образ собрался, без всяких замен "strncpy" и прочей лабуды! )
yurius
Результат - образ собрался, без всяких замен "strncpy" и прочей лабуды! )
Это не плохо, молодец. А уверен, что получится постоянно держать в системе gcc7? Луше осваивай исключение конкретных варнингов.
Ошибки не исчезают с опытом - они просто умнеют
vasek
yurius
Результат - образ собрался, без всяких замен "strncpy" и прочей лабуды! )
А уверен, что получится постоянно держать в системе gcc7?
А что может этому помешать? Думаю, gcc9 выйдет ещё не скоро, а к тому времени необходимость сборки для 5-го Андроида отпадёт вовсе (либо буду собирать на Дебиане, на Кальке). А сильно драконить исходники - это лишний геморрой. Если бы других вариантов не было, тогда другое дело, а их уже целых два - приведенный выше, и сборка на других системах. Да и сейчас подавляющее большинство девайсов идут с Андроид 6+, а там всё в порядке.
vasek
, что получится постоянно держать в системе gcc7
А какие проблемы ? Ставится параллельно штатному gcc (8.1.1) и никак ему не мешает, по умолчанию используется штатный для других версий задается через переменные или прописывается при сборке. В aur если что еще четвертая версия до сих пор есть
vs220
Ставится параллельно штатному gcc (8.1.1) и никак ему не мешает
Всегда считал, что пакет будет независим, если он тащит с собой все свое и не использут ничего из установленного в систему.
Но если он использует что то из установленной системы (например, какие то библиотеки), то можно ожидать, что со временем он может и не запуситься.
Значит я был не прав?

UPD - Ну и лично для меня намного интереснее найти решение - больше будет и понимания и опыта.
Ошибки не исчезают с опытом - они просто умнеют
vasek
(например, какие то библиотеки
Нужные ставятся по зависимостям.
gcc7-libs для gcc7
Не должно быть проблем. По крайней мере gcc5 из аура у меня работает без проблем, так что как ТС и говорил пока исчезнет седьмая версия из реп или аур то про 6 андроид точно забудут. Ну а учиться всегда полезно, вот только даже мантейнеры не заморачиваются с правкой а просто собирают нужной версией, а для проприетарных так вообще не очень-то и подправиш cuda например использует седьмую версию
vs220
вот только даже мантейнеры не заморачиваются с правкой а просто собирают нужной версией
В данном случае, возможно, это и есть наилучший выход (хотя, как написал, отключить конкретное появившееся предупреждение вроде бы то же не проблема).
Мне иногда приходится пересобирать самому некоторые модули, которые написаны давно, а gcc постоянно бежит вперед и получаю кучу варнингов, что нагуглится, правлю, но большей частью выключаю конкретные варнинги (не ставить же мне каждый раз нужную версию gcc).
Вот в данном случае и предложил отключить конкретное предупреждение -Wstringop-truncation, которое включили в gcc8.
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.