Несовместимые ограничения операндов в «асме»

Я использую Qt и хочу включить библиотека ttmath. Он хорошо тестировался на Windows XP и Windows 7. Сейчас я использую Qt-creator в Ubuntu, и при попытке компилировать проект выдает следующую ошибку:

.../ttmathuint_x86.h:637: error: inconsistent operand constraints in an 'asm'
: "cc", "memory" );
^

Часть кода выглядит так:

#ifdef __GNUC__
uint dummy, dummy2;

__asm__  __volatile__(

"xorl %%edx, %%edx    \n""negl %%eax           \n"  // CF=1 if rax!=0 , CF=0 if rax==0

"1:                                 \n""movl (%%esi,%%edx,4), %%eax    \n""sbbl %%eax, (%%ebx,%%edx,4)    \n"
"incl %%edx                     \n""decl %%ecx                     \n""jnz 1b                         \n"
"adc %%ecx, %%ecx               \n"
: "=c" (c), "=a" (dummy), "=d" (dummy2)
: "0" (b),  "1" (c), "b" (p1), "S" (p2)
: "cc", "memory" );

#endif

Ошибка отображается только тогда, когда я добавляю парсер в свой проект, как в предыдущем примере, здесь: http://www.ttmath.org/samples

Я понятия не имею, почему это не работает, так как я мало знаю о сборке или процессе компиляции.

Я прочитал в интернете, что я решил добавить QMAKE_CXXFALGS = -fno-gcse в мой файл «.pro», но это не сработало.

3

Решение

Причиной этой ошибки является -fPIC или же -fpic флаг компилятора, который указывает, что код, независимый от позиции, должен быть выдан. Для поиска переменных используется глобальная таблица смещений, указатель которой хранится в ebx, Поэтому с этим флагом вы не можете использовать ebx в линейной сборке.

В соответствии с https://software.intel.com/en-us/blogs/2014/12/26/new-optimizations-for-x86-in-upcoming-gcc-50-32bit-pic-mode это изменено в GCC 5.0.
Библиотека, вероятно, меняет ваши флаги, поэтому вы должны посмотреть, можете ли вы изменить свой код.

3

Другие решения

В моем случае я мог бы решить, обновив мой gcc до версии 5.0

Это ссылка на источник https://askubuntu.com/questions/618474/how-to-install-the-latest-gcurrently-5-1-in-ubuntucurrently-14-04 и эти команды они предлагают (и те, которые я использовал):

sudo add-apt-repository ppa: ubuntu-toolchain-r / test
sudo apt-get update
sudo apt-get установить gcc-5 g ++ — 5

Возможности обновления sudo —install / usr / bin / gcc gcc / usr / bin / gcc-5 60 — раб / usr / bin / g ++ g ++ / usr / bin / g ++ — 5

0

По вопросам рекламы [email protected]