Сбой компиляции из-за «Смещение должно быть больше или равно -32768 и меньше или равно 32767» с g ++ 4.6.1 на aix6.1 - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь скомпилировать код c с g ++ 4.6.1 на aix6.1 с использованием ассемблера версии 6.1.

Компиляция завершается неудачно из-за следующего: -

line 3954495: 1252-171 The displacement must be greater than or equal to
    -32768 and less than or equal to 32767.
line 3955281: 1252-171 The displacement must be greater than or equal to
    -32768 and less than or equal to 32767.
line 3955395: 1252-171 The displacement must be greater than or equal to
    -32768 and less than or equal to 32767.
line 3955401: 1252-171 The displacement must be greater than or equal to
    -32768 and less than or equal to 32767.

Я скомпилировал, используя следующие параметры: -

g++ -o tcl-int-cln.o -maix64 -bbigtoc -c tcl-int-cln.C

Я скомпилировал тот же файл, используя gcc4.0.2 на aix5.3.Он работал нормально.

Обычно это происходит, когда вы пытаетесь скомпилировать большие файлы, используя g ++.Я дал вариант для этого, но проблема сохраняется.Это проблема ассемблера?

Может ли кто-нибудь пролить свет на это или это ошибка gcc или проблема с aix?

Есть ли какое-нибудь решение?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 06 декабря 2011

Известная ошибка GCC , начиная с GCC 2.95. GCC не может обрабатывать большие входы; затем он соберет ld r4,X(r3) инструкции (относительная нагрузка, смещение X), где X больше 16 бит. Это не разрешено на POWER.

1 голос
/ 02 апреля 2018

Я использовал GCC и получил эту ошибку компиляции.Добавление -mcmodel = large исправило это для меня.

0 голосов
/ 16 декабря 2011

Попробуйте добавить -Wl,-bbigtoc к вашим флагам компилятора. Если это не сработает, попробуйте добавить также -mminimal-toc.

...