Я пытаюсь скомпилировать библиотеку C ++ для Tegra TK1. Библиотека ссылается на TBB, который я вытащил с помощью менеджера пакетов. Во время компиляции я получил следующую ошибку
/tmp/cc4iLbKz.s: Assembler messages:
/tmp/cc4iLbKz.s:9541: Error: thumb conditional instruction should be in IT block -- `strexeq r2,r3,[r4]'
Немного погуглить и этот вопрос заставил меня попробовать добавить -mimplicit-it=thumb
в CMAKE_CXX_FLAGS, но компилятор не распознает его.
Я компилирую на Tegra с Kernal 3.10.40-grinch-21.3.4 и использую компилятор gcc 4.8.4 (вот что возвращается, когда я набираю c ++ -v)
Я не уверен, что означает первоначальное сообщение об ошибке, хотя я думаю, что оно связано с библиотекой, связанной с TBB, а не с источником, который я компилирую. Проблема с исправлением тоже загадочная. Может кто-нибудь пролить некоторый свет на это?
-mimplicit-it
является вариант для ассемблера, не компилятору. Таким образом, в отсутствие определенных флагов ассемблера в вашем make-файле (которого у вас, вероятно, нет, учитывая, что вы не используете отдельный шаг ассемблера), вам нужно будет использовать -Wa
вариант компилятору чтобы пройти через это, т.е. -Wa,-mimplicit-it=thumb
,
Источником проблемы почти наверняка является некоторая встроенная сборка — возможно, из статической строки в заголовочном файле, если вы действительно связываете только предварительно созданные библиотеки — которая содержит условно исполняемые инструкции (я собираюсь догадаться, что-то вроде cmpxchg
реализация). Поскольку ваш набор инструментов вполне может быть настроен для компиляции с набором команд Thumb — что требует предшествующего it
(If-Then) инструкция для установки условных инструкций — по умолчанию, другой альтернативой может быть просто скомпилировать -marm
(и / или удалить -mthumb
если уместно) и обойти проблему, вообще не используя Thumb.
Добавление опции компилятора:
-Вашингтон
должен решить проблему.