Jump to content
Форум по продукции MOXA

Кросс-компилятор arm-linux v. 1.3 и русский язык


Recommended Posts

Использую сабж для разработки под UC-7112-LX Plus. Версия 1.3 - последняя, скачана с англоязычного сайта производителя.

 

Почему-то сообщения, выводимые компилятором выглядят вот так:

 

dscollection.cpp:320: instantiated from here

../base/fifoconnection.h:353: предупреждение: long int format,

unsigned int arg (arg 5)

 

То есть имеем эдакий "пераццкий" перевод а-ля Промт: слово warning заменено на русский эквивалент, все остальное остается по-прежнему. Предположительно, это связано с какими-то настройками ОС (Ubuntu 10.10).

 

К сожалению, парсер компиляторного вывода Eclipse не знает ридну мову и маркирует такое предупреждение как ошибку. Можно как-нибудь (настройками командной строки компилятора или еще как-нибудь) отключить эту эрзац-локализацию?

Link to comment

ну насчет перевода я не в курсе, да и эклисами не пользуюсь, от make and direct hand тащусь,

но в данном предупреждении говориться, что имеет место быть попытка инстантировать шаблон у которого 5-й параметр заявлен беззнаковым целым длинным, а устанавливается знаковым целым длинным - т.е. закладываешь себе мину замедленного действия, как в той истории про робота который переварачивался из-за того считал что едет назад и сматывал интерфейсный кабель, а на самом деле просто разогнался так что значение скорости в переменной изменило содержимое 7 бита (считаем с 0) в старшем байте скорости, - из-за чего робот посчитал что, скорость отрицательна, значит едет назад.... :)

 

либо измени шаблон, либо сделай безопасное приведение типов ... и будет тебе щастье

P.S. и личку проверь, я там тебе по флешке отписался.

Link to comment

но в данном предупреждении говориться, что имеет место быть попытка инстантировать шаблон у которого 5-й параметр заявлен беззнаковым целым длинным, а устанавливается знаковым целым длинным - т.е. закладываешь себе мину замедленного действия, как в той истории про робота который переварачивался из-за того считал что едет назад и сматывал интерфейсный кабель, а на самом деле просто разогнался так что значение скорости в переменной изменило содержимое 7 бита (считаем с 0) в старшем байте скорости, - из-за чего робот посчитал что, скорость отрицательна, значит едет назад.... :)

 

либо измени шаблон, либо сделай безопасное приведение типов ... и будет тебе щастье

 

На самом деле данное конкретное предупреждение связано со строкой формата vfprintf. Выводится значение типа size_t. Код компилируется под 2 платформы. На uClinux size_t является unsigned long, и в строке должно быть %ld, на Linux - unsigned int, соответственно компилятор ожидает %d. Ситуация потенциально опасна, если sizeof(long) != sizeof(int), что в моем случае не так. Особенно поганая ситуация может получиться, если длина различается, а компилятор использует стек для передачи параметров при вызове функции (в нашем случае для этого задействуются регистры). Тогда в случае некорректного вызова можно поиметь нарушение стека.

 

В моем случае для избавления от warning'ов можно было выкинуть нафиг printf-подобные функции и использовать <iostream>. Однако, поскольку текущий проект - это наш первый проект на uClinux, я изначально решил не рисковать и не использовать громоздкую потоковую библиотеку C++, тем более что семейство printf используется в основном для лога ошибок. Поэтому данную конкретную ситуацию я исправил с помощью define-константы, задающей нужный формат вывода size_t.

 

Но вопрос, разумеется, не в предупреждении, а в том, как заставить компилятор давать нормальный вывод.

Link to comment
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...