“<project> - 调试”使用无效的编译器。可能编译器选项中的工具链路径设置不正确?

问题描述 投票:0回答:1

我在为非标准编译器设置 CodeBlocks 时遇到问题。我已经为此苦苦挣扎了三四天(时断时续)。我收到错误:

"<project> - Debug" uses an invalid compiler. Probably the toolchain path
within the compiler options is not setup correctly?!

构建此项目时我需要使用以下设置。它与支持 FIPS 的 OpenSSL 库集成。支持 FIPS 的 OpenSSL 库是从源代码构建的并安装在

/usr/local/ssl
:

$ export CC=`find /usr/local/ssl -name fipsld`
$ export FIPSLD_CC=`find /usr/bin -name g++`
$ echo $CC
/usr/local/ssl/fips-2.0/bin/fipsld
$ echo $FIPSLD_CC
/usr/bin/g++

fipsld
将编译
fips_premain.c
并执行一些魔法以确保模块的签名嵌入到生成的可执行文件中。如果不需要
fipsld
,那么它只是调用
CC
(因此需要设置
FIPSLD_CC
的原因(另请参阅 Mike 对循环依赖的评论)。

我已经使用 makefile 从命令行执行了一千次这样的操作,所以我知道它是有效的。

环境

设置 -> 环境下,我有以下内容:

CodeBlocks Environment

编译器和调试器

设置 -> 编译器和调试器下,我有以下内容:

CodeBlocks Program Files

并且:

CodeBlocks Additional Paths

项目

该项目使用FIPSLD编译器:

CodeBlocks project compiler

但是当我尝试构建时,我得到以下信息:

enter image description here

我还尝试将编译器设置为

/usr/local/ssl/fips-2.0/bin/fipsld
的完整指定路径。

(我已经关闭/打开 CodeBlocks 的次数太多了,并且多次清理这个项目以尝试重新读取配置设置)。

问题

如何在 CodeBlocks 中将编译器设置为

/usr/local/ssl/fips-2.0/bin/fipsld

相关:我已将

gdb-7.6.2
安装在
/usr/local/bin
中。但是 CodeBlocks 使用 Debian 附带的
gdb-7.4
,即使我也为调试器指定了路径(即
usr/local
/usr/local/bin/gdb
路径)。你知道这里出了什么问题吗?

为了完整起见,这与 Code::Blocks 的无效工具链错误无关。在这个SO问题中,OP没有安装工具链。

path linker codeblocks toolchain
1个回答
1
投票

“无效编译器”困难可以通过如下方式解决(至少是 为我)。我不知道这是否足以让你建立你的 项目。

我假设

fipsld
脚本存在且正确,位于
/usr/local/ssl/fips-2.0/bin/fipsld

  • 在 Code::Blocks IDE 中,使用您的名称创建一个新编译器 选择的是GCC的副本。 (看来你已经成功完成了)

  • 在新编译器的设置中,选择工具链可执行文件并进行 以下新设置:

    • 编译器的安装目录 =
      <empty>
    • 程序文件 - > C 编译器 = /usr/local/ssl/fips-2.0/bin/fipsld
  • 保留所有其他编译器设置不变,并且

    OK

  • 确保 Code::Blocks 安装了环境变量编辑器插件 根据https://stackoverflow.com/a/21064014/1362568

  • Environment -> Environment Variables中,添加环境变量 设置:

    CC = 海湾合作委员会

OK
。不要向设置添加任何其他路径,除非您 由于其他原因需要稍后。

我现在可以使用新编译器构建 C 项目。代码::块问题 构建时警告

Can't find compiler executable in your configured
search paths for <compiler_name>
,但这是误报。

屏幕截图中显示的环境设置:

CC = /usr/local/ssl/fips-2.0/bin/fipsld
FIPSLD_CC = /usr/bin/g++

偏离了目标,因为

fipsld
脚本的第一行是:

CC=${FIPSLD_CC:-${CC}}

因此,如果您进行了两个设置中的第一个设置,但没有进行第二个设置,则脚本 将默认

$CC
为其自己的路径名 - 循环。如果你避免这种情况 通过进行这两个设置,第一个设置对于 Code::Blocks 来说是多余的: 它不需要引用的环境变量
/usr/local/ssl/fips-2.0/bin/fpsld
因为你已经配置了 该脚本作为编译器。只有
fipsld
本身想要
$CC
,指的是 C 编译器。所以你不妨设置
CC = gcc
, 主机 C 编译器。
CC = g++
可能适合您的目的,但按照惯例
CC
指的是您的 C 编译器,而您的 C++ 编译器则由
CXX
指代。

关于配置调用/usr/local/bin/gdb而不是/usr/bin/gdb的问题, 我只能谈论我正在运行的 v12.11,但对于 12.11 这就是答案

© www.soinside.com 2019 - 2024. All rights reserved.