Я пытаюсь собрать C ++ программу для ARM на плате ODROID X2 с помощью Linaro 12.11. В процессе компиляции я обнаружил ошибку такого типа, в которой я не смог найти ответ:
/tmp/ccsPcPGU.s: Сообщения ассемблера:
/tmp/ccsPcPGU.s:5488: Ошибка: выбранный процессор не поддерживает режим Thumb `swp r3, sl, [fp] ‘
Я даже не помню, чтобы здесь использовался режим Thumb. Есть ли какие-либо предложения, как я могу решить эту проблему?
Обновить:
@auselen Это то, что я получил за gcc -v
:
root@linaro-ubuntu-desktop:/# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-a --with-float=hard --with-fpu=vfpv3-d16 --with-mode=thumb --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
У меня все еще возникала та же проблема, когда я пытался скомпилировать каждый файл конструктора проекта, используя gcc -c
так что я собираюсь поверить, что есть проблема с моим arm-linux-gnueabihf
,
Инструкции SWP / SWPB не существуют в наборе команд Thumb.
Если для цепочки инструментов Linaro 12.11 по умолчанию используется Thumb, вы, вероятно, пропускаете (или имеете неверную) директиву о состоянии команд в коде сборки.
В зависимости от того, что является причиной ошибки (встроенный оператор asm, включенный в C, или файл .S, который был предварительно обработан), все или части вашего проекта должны быть построены как инструкции ARM.
Кажется, виновник include/refmem/atomic.h
и обновление компилятора должно исправить это: https://github.com/cmyth/cmyth/issues/11
РЕДАКТИРОВАТЬ: в соответствии с эта запись об ошибке, исправление доступно в libgc (1: 6.8-1.2ubuntu2).