@emashev

Как переделать функцию под gcc 9?

Есть древнее приложение, пытаюсь собрать под последнеей версии alpine с gcc 9.
Thread model: posix
gcc version 9.3.0 (Alpine 9.3.0)


Кое-какие ошибки победил, запоролся на этой:
При попытке собрать, возникает ошибка на этом файле:
https://github.com/muggot/openmcu/blob/master/libs...

Конкретно в этих функциях:
PInt64 PString::AsInt64(unsigned base) const
{
  char * dummy;
  return strtoq(theArray, &dummy, base);
}

PUInt64 PString::AsUnsigned64(unsigned base) const
{
  char * dummy;
  return strtouq(theArray, &dummy, base);


osutil.cxx: In member function 'PInt64 PString::AsInt64(unsigned int) const':
osutil.cxx:451:10: error: 'strtoq' was not declared in this scope; did you mean 'strtok'?
  451 |   return strtoq(theArray, &dummy, base);
      |          ^~~~~~
      |          strtok
osutil.cxx: In member function 'PUInt64 PString::AsUnsigned64(unsigned int) const':
osutil.cxx:457:10: error: 'strtouq' was not declared in this scope; did you mean 'strtoul'?
  457 |   return strtouq(theArray, &dummy, base);
      |          ^~~~~~~
      |          strtoul

}


Ок, меняю - как предлагает компилятор:

PInt64 PString::AsInt64(unsigned base) const
{
  char * dummy;
  return strtok(theArray, &dummy, base);
}

PUInt64 PString::AsUnsigned64(unsigned base) const
{
  char * dummy;
  return strtoul(theArray, &dummy, base);
}


osutil.cxx: In member function 'PInt64 PString::AsInt64(unsigned int) const':
osutil.cxx:451:27: error: cannot convert 'char**' to 'const char*'
  451 |   return strtok(theArray, &dummy, base);
      |                           ^~~~~~
      |                           |
      |                           char**
In file included from /usr/include/fortify/string.h:22,
                 from /tmp/openmcu/libs/ptlib/include/ptlib/object.h:489,
                 from /tmp/openmcu/libs/ptlib/include/ptlib/contain.h:257,
                 from /tmp/openmcu/libs/ptlib/include/ptlib.h:161,
                 from osutil.cxx:238:
/usr/include/string.h:50:33: note:   initializing argument 2 of 'char* strtok(char*, const char*)'
   50 | char *strtok (char *__restrict, const char *__restrict);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~


Как можно победить?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
Замени strtoq на strtoll, strtouq на strtoull.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы