【问题标题】:can't compile my old projects (with gcc)无法编译我的旧项目(使用 gcc)
【发布时间】:2018-12-17 21:12:42
【问题描述】:

当我将CLionyocto 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 编译器解决这个问题吗?

【问题讨论】:

  • 可以从命令行编译吗?
  • 你的编译器属于一个 sysroot,但你需要告诉它。 yocto 可能会在 .../toolchain2/sysroots 下的某处转储 CMake 工具链定义文件(扩展名 .cmake),在这种情况下,您可以使用 -DCMAKE_TOOLCHAIN_FILE=... 将 CMake 指向它
  • @PaulSanders 它在命令行中编译得很好,但是当我尝试在 Clion 中构建项目时,gcc 编译器显示该错误。
  • @Botje 我已经将Cmake添加到目录中了,看看我刚刚添加的截图。但是,它仍然不起作用。它给了我同样的错误
  • CMake 日志是否显示它尝试了哪个命令?

标签: c++ eclipse cmake yocto clion


【解决方案1】:

因此,在研究、尝试并失败了所有可能的选项之后,我找到了以下答案: 显然 Clion 无法检测到编译器,除非我在启动 Clion 之前 sourcecmake,因此它可以将编译器重定向到 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

然后,我在启动 Clion

之前运行了以下 bash 代码以确保设置正确运行
#!/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 编译器问题。

值得一提的是,在CMAKE_TOOLCHAIN_FILE= 中定义Cmake 选项 时,Clion 不知何故不接受- 参数。因为它为我正确编译和构建。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。 我的情况有点复杂。我需要在默认工具链 (x86) 和 yocto 交叉编译工具链 (ARM) 之间切换来编译同一个项目。

    我想出了以下解决方案:

    1. 创建一个 bash 脚本,该脚本调用初始化 Yocto env 的脚本,然后调用 cmake:
    #!/bin/bash
    source ~/yocto_sdk/toolchain/environment-setup-cortexa9hf-neon-poky-linux-gnueabi; bash -c "cmake $(printf ' %q' "$@")" C
    
    1. 创建一个新的工具链,脚本设置为 CMake。

    1. 然后您可以在工作时在默认工具链和 yocto 工具链之间切换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多