无法编译我的旧项目(使用 gcc)
can't compile my old projects (with gcc)
当我将 CLion
与 yocto SDK
一起使用时,我的 C 编译器损坏了,但它在 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 编译器的这个问题?
所以在研究、尝试并失败所有可能的选项之后,我找到了我的答案如下:
显然 Clion 无法检测到编译器,除非我在启动 Clion 之前 source
和 cmake
,因此它可以重定向Yocto 编译器的编译器而不是检测主机编译器。
因此,我创建了以下 Bash 脚本来启动上述命令。
货源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 交叉编译工具链 (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 工具链之间切换。
当我将 CLion
与 yocto SDK
一起使用时,我的 C 编译器损坏了,但它在 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 编译器的这个问题?
所以在研究、尝试并失败所有可能的选项之后,我找到了我的答案如下:
显然 Clion 无法检测到编译器,除非我在启动 Clion 之前 source
和 cmake
,因此它可以重定向Yocto 编译器的编译器而不是检测主机编译器。
因此,我创建了以下 Bash 脚本来启动上述命令。
货源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 交叉编译工具链 (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 工具链之间切换。