2016-03-14 4 views
2

Я пытаюсь скомпилировать библиотеку C++ для Tegra TK1. Библиотека связывается с TBB, которую я вытащил с помощью диспетчера пакетов. Во время компиляции я получил следующую ошибку-mimplicit-it флаг компилятора не распознан

/tmp/cc4iLbKz.s: Assembler messages: 
/tmp/cc4iLbKz.s:9541: Error: thumb conditional instruction should be in IT block -- `strexeq r2,r3,[r4]' 

Немного прибегая к помощи и this question привела меня попробовать добавить -mimplicit-it=thumb в CMAKE_CXX_FLAGS, но компилятор не распознает его.

Я компиляции на Tegra с Kernal 3.10.40-Гринч-21.3.4, и с помощью GCC 4.8.4 компилятора (тот, что возвращается, когда я типа C++ -v)

Я не уверен, что означает начальное сообщение об ошибке, хотя я думаю, что это имеет какое-то отношение к связанной библиотеке TBB, а не к исходному компилятору. Проблема с исправлением также таинственна. Может кто-нибудь пролить некоторый свет на это?

ответ

3

-mimplicit-it является an option to the assembler, а не компилятору. Таким образом, при отсутствии определенных флагов ассемблера в вашем файле makefile (которого вы, вероятно, не имеете, учитывая, что вы не используете отдельный шаг ассемблера), вам необходимо использовать the -Wa option to the compiler, чтобы передать его, т. Е. -Wa,-mimplicit-it=thumb.

Источником проблемы является почти наверняка некоторая встроенная сборка - возможно, из статического встроенного файла заголовка, если вы действительно связываете только предварительно построенные библиотеки, в котором содержатся условно исполняемые инструкции (я собираюсь угадать его что-то вроде реализации cmpxchg). Так как ваша инструментальная цепочка вполне может быть настроена для компиляции набора команд Thumb - which requires a preceding it (If-Then) instruction to set up conditional instructions - по умолчанию другой вариант может заключаться в компиляции с -marm (и/или удалении -mthumb, если это необходимо) и обойти проблему, не используя Thumb вообще.

+0

Я пошел с '-Wa, -mimplicit-it = thumb', и это, похоже, решило ошибку ассемблера. Есть ли производительность или другие соображения, которые должны сообщать о моем выборе использования большого пальца или нет? – dmagree

+0

В нем, вероятно, нет большого количества - все еще есть определенные вещи, которые вы можете сделать с инструкцией ARM, которая требует нескольких инструкций Thumb (даже с Thumb-2); с другой стороны, код Thumb по-прежнему имеет тенденцию быть меньшим, поэтому вы лучше используете I-cache (хотя вы можете потенциально быстрее запускать в угловые регистры ветви). Вам действительно нужно провести тщательный бенчмаркинг в каждом конкретном случае, чтобы решить, заботитесь ли вы. – Notlikethat

-1

Добавление опции компилятора:

-wa

должны решить эту проблему.