Open neurofreak-alt opened 3 years ago
This is what I found in qtsring.h:
static QString fromUtf16(const ushort *, int size = -1);
static QString fromUcs4(const uint *, int size = -1);
static QString fromRawData(const QChar *, int size);
#if defined(Q_COMPILER_UNICODE_STRINGS)
static QString fromUtf16(const char16_t *str, int size = -1)
{ return fromUtf16(reinterpret_cast<const ushort *>(str), size); }
static QString fromUcs4(const char32_t *str, int size = -1)
{ return fromUcs4(reinterpret_cast<const uint *>(str), size); }
#endif
I can assume that the compiler does not support the C11 standard (iso9899:2011) or this support not enabled.
You can try adding the appropriate option to CMakeLists.txt for the lcc compiler to enable C11 support, if there is one.
Somewhere here:
https://github.com/buggins/coolreader/blob/fa832c18c1f075c07627e22f285a2da186a854c6/CMakeLists.txt#L39-L52
Or you can try with following patch:
diff --git a/cr3qt/src/crqtutil.cpp b/cr3qt/src/crqtutil.cpp
index 20e7dffbb..d0abba711 100644
--- a/cr3qt/src/crqtutil.cpp
+++ b/cr3qt/src/crqtutil.cpp
@@ -11,7 +11,7 @@ lString32 qt2cr(QString str)
QString cr2qt(lString32 str)
{
- return QString::fromUcs4(str.c_str(), str.length());
+ return QString::fromUcs4((const uint *)str.c_str(), str.length());
}
class CRPropsImpl : public Props
https://www.altlinux.org/Эльбрус/lcc But I think you've seen that.
return QString::fromUcs4((const uint *)str.c_str(), str.length());
Применил патч, и теперь появились другие ошибки. Использую компилятор МЦСТ lcc версии 1.25, который по умолчанию использует стандарт С++14. Здесь описание компилятора.
Ошибки:
[ 77%] Building CXX object cr3qt/CMakeFiles/cr3.dir/src/settings.cpp.o
lcc: "/export/home/nightscreamer/sources/coolreader/qtbuild/cr3qt/ui_settings.h", строка 1445: ошибка #135:
класс "QComboBox" не имеет члена "setCurrentText"
cbFontShaping->setCurrentText(QApplication::translate("SettingsDlg", "Simple (FreeType only, fastest)", 0, QApplication::UnicodeUTF8));
^
lcc: "/export/home/nightscreamer/sources/coolreader/cr3qt/src/settings.cpp", строка 190: предупреждение #1873:
сравнение знакового и беззнакового операндов [-Wsign-compare]
for (int i = 0; i < MAX_REND_FLAGS_INDEX; i++) {
^
lcc: "/export/home/nightscreamer/sources/coolreader/cr3qt/src/settings.cpp", строка 200: предупреждение #1873:
сравнение знакового и беззнакового операндов [-Wsign-compare]
for (int i = 0; i < MAX_DOM_VERSIONS_INDEX; i++) {
^
lcc: "/export/home/nightscreamer/sources/coolreader/cr3qt/src/settings.cpp", строка 1150: предупреждение #1873:
сравнение знакового и беззнакового операндов [-Wsign-compare]
if (index < 0 || index >= MAX_REND_FLAGS_INDEX)
^
lcc: "/export/home/nightscreamer/sources/coolreader/cr3qt/src/settings.cpp", строка 1174: предупреждение #1873:
сравнение знакового и беззнакового операндов [-Wsign-compare]
if (index < 0 || index >= MAX_DOM_VERSIONS_INDEX)
^
1 ошибка обнаружено при компиляции "/export/home/nightscreamer/sources/coolreader/cr3qt/src/settings.cpp".
make[2]: *** [cr3qt/CMakeFiles/cr3.dir/build.make:601: cr3qt/CMakeFiles/cr3.dir/src/settings.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:405: cr3qt/CMakeFiles/cr3.dir/all] Ошибка 2
make: *** [Makefile:130: all] Ошибка 2
Все-таки лучше не надеяться на дфеолты в компиляторе и задать в явном виде: %global optflags %{optflags} -std=c++14
А ошибки типа -W*
обходятся убиранием -Wall
или добавлением -Wno-all
во флаги компилятора
Не надо компилятор затыкать, он всегда дело говорит. К сожалению, опции -Wall -Wextra
не всю полезную диагностику включают, приходится ещё досыпáть кучу флагов.
Про инициативу и инициатора поговорку помню, над патчами подумаю, но ничего обещать пока не могу.
Вывод компилятора:
В чём может быть проблема?