Я видел эту ошибку до работы в архитектуре PowerPC. Предполагая, что вы работаете в аналогичной среде, проблема связана именно с объемом памяти в системе и диапазоном инструкций относительного перехода.
Аргоннская национальная лаборатория имеет веб-страницу , в которой подробно рассказывается об этой проблеме . Следующая выдержка объясняет проблему с относительной адресацией ветви:
Команда относительного перехода PowerPC ограничена переходами между
+/- 32 МБ текущей инструкции (24 бита = +/- 4 М инструкции, 4 байта на инструкцию = +/- 32 МБ). К сожалению, ядро vxWorks
помещается в нижнюю часть ОЗУ, но загружает весь код приложения
на верхнем конце. Если два разделены более чем 32 МБ (если вы
64 МБ или более на борту), когда он пытается загрузить приложение
закодировать те вызовы, которые используют эти относительные инструкции ветвления для
Процедуры vxWorks не могут быть разрешены в течение 24 бит, и загрузчик
печатает сообщение, которое вы видите.
Предлагаемое решение этой проблемы, как в Аргоннской национальной лаборатории, состоит в перекомпиляции загруженных модулей с включенным флагом -mlongcall
.
Ваш первоначальный вопрос показал, что этот флаг не является решением вашей проблемы. Флаг gnu
установлен, но никакой дополнительной информации для вашего компилятора не указано. Учитывая, что я могу только предложить вам проверить документацию вашего компилятора и убедиться, что флаг -mlongcall
действителен.
Предполагая, что флаг поддерживается, это может быть вызвано связанной библиотекой, которая сама не была скомпилирована с флагом -mlongcall
. Статья в ComplexIT подробно описывает аналогичную проблему, также в архитектуре PowerPC, с использованием QT. Чтобы решить эту проблему, необходимо перестроить все библиотеки, включая QT.