我在为非标准编译器设置 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 从命令行执行了一千次这样的操作,所以我知道它是有效的。
环境
在设置 -> 环境下,我有以下内容:
编译器和调试器
在设置 -> 编译器和调试器下,我有以下内容:
并且:
项目
该项目使用FIPSLD编译器:
但是当我尝试构建时,我得到以下信息:
我还尝试将编译器设置为
/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没有安装工具链。
“无效编译器”困难可以通过如下方式解决(至少是 为我)。我不知道这是否足以让你建立你的 项目。
我假设
fipsld
脚本存在且正确,位于 /usr/local/ssl/fips-2.0/bin/fipsld
。
在 Code::Blocks IDE 中,使用您的名称创建一个新编译器 选择的是GCC的副本。 (看来你已经成功完成了)
在新编译器的设置中,选择工具链可执行文件并进行 以下新设置:
<empty>
保留所有其他编译器设置不变,并且
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 这就是答案