Не могу скомпилировать мои старые проекты (с помощью gcc)
У меня сломан компилятор C при использовании CLion
с yocto SDK
, но он отлично работает на eclipse Oxygen
, Это ошибка в компиляторе:
CMake Error at /home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/share/cmake-3.7/Modules/CMakeTestCCompiler.cmake:51 (message):
The C compiler
"/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc"
is not able to compile a simple test program.
И это ошибка журнала:
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find crt1.o: No such file or directory
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find crti.o: No such file or directory
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find crtbegin.o: No such file or directory
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find -lgcc
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find -lgcc_s
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find -lc
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find -lgcc
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find -lgcc_s
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find crtend.o: No such file or directory
/home/developer/yocto_SDK2/toolchain2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.4.0/real-ld: cannot find crtn.o: No such file or directory
Я также настроил пути вручную, и это было хорошо. [![введите описание изображения здесь][1]][1]
Кто-нибудь знает, как решить эту проблему для компилятора gcc?
1 ответ
Итак, после исследования, проб и сбоя всех возможных вариантов, я нашел следующий ответ: Очевидно, что Clion не может обнаружить компиляторы, пока я source
а также cmake
перед запуском Clion он мог перенаправлять компиляторы на компиляторы Yocto, а не обнаруживать хост-компиляторы. Итак, я создал следующий скрипт Bash, который запускает упомянутые команды.
Sourcing setup_sdk следующим образом:
#!/bin/bash
# define root paths
export SDK_TC_ROOT=~/yocto_sdk/toolchain
# source yocto sdk stuff
source ${SDK_TC_ROOT}/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
Затем я запустил следующий код bash, чтобы убедиться, что установка выполняется правильно перед запуском Clion
#!/bin/bash
PATH_TO_Clion=~/clion/bin
# setup env
source setup_sdk
cmake ./
# start Clion with all variables
$PATH_TO_Clion/clion.sh
Затем Clion автоматически обнаружил компиляторы, не определяя их вручную, что привело к упомянутой проблеме компилятора C.
Стоит отметить, что Clion почему-то не принимает -
параметр при определении параметров Cmake в CMAKE_TOOLCHAIN_FILE=
, Как это скомпилировано и построено правильно для меня.
У меня была аналогичная проблема. Однако мой случай немного сложнее. Мне нужно переключаться между набором инструментов по умолчанию (x86) и yocto cross-compile toolchain (ARM), чтобы скомпилировать один и тот же проект.
Я пришел к следующему решению:
- Создайте сценарий bash, который вызывает сценарий, инициализирующий Yocto env, а затем вызывает cmake:
#!/bin/bash
source ~/yocto_sdk/toolchain/environment-setup-cortexa9hf-neon-poky-linux-gnueabi; bash -c "cmake $(printf ' %q' "$@")" C
- Создайте новую цепочку инструментов со сценарием CMake.
- Затем вы можете переключаться между цепочкой инструментов по умолчанию и yocto во время работы.