在为 INTEL C++ 编译器配置的搜索路径中找不到可执行文件 (Linux)

Can't find file executable in your configured search path for INTEL C++ compiler (Linux)

我想使用 code::blocks 调试我的 C++ 代码。我打开一个新项目并粘贴我的代码。但是有上面的错误。老实说,我不确定我的编译器是什么!当我想 运行 我的代码时,我写:

g++ -std=gnu++11 mycodename.cpp

在终端中。 如何删除 Linux 中的上述错误? 一步一步的回答是高度赞赏。 我将编译器从 setting...compiler 更改为 gnu gcc,但错误与英特尔编译器有关!

I want to debug my c++ code using code::blocks.

不要,因为你做不到。

Code::Blocks is just an IDE,这是一些源代码编辑器,能够 运行 编译器和调试器。所以 Code::Blocks 不是 编译器并且 不是 调试器(但它可以 运行 它们)。

我不会向您解释如何使用 Code::Blocks。它有一些文档和一些论坛。我宁愿尝试解释您应该如何调试 C++ 代码。

g++

编译

首先,你用GCC (it a compiler, more precisely the GNU Compiler Collection; you'll use it with g++ program to compile C++ code, with gcc to compile C code, etc....). Read the chapter about Invoking GCC编译。

将由单个 C++ translation unit(包含一些头文件的C++文件yoursourcecode.cpp)组成的简单C++程序编译成可执行文件yourprog 使用:

 g++  -std=gnu++11 -Wall -Wextra -g yoursourcecode.cpp -o yourprog

注意:

  • g++ 的程序参数顺序很重要。

  • -std=gnu++11 定义你的 C++ 方言

  • -Wall -Wextra 要求所有警告和一些额外的警告。你真的想要警告。然后你需要改进你的源代码以完全没有警告并重复编译。

  • -g 请求调试信息(DWARF 格式)。你希望能够调试。

  • -o yourprog 要求编​​译器生成 yourprog ELF 可执行文件

  • 作为输出

顺便说一句,您不能使用 Code::Blocks 来编译您的代码。您可以将其配置为 运行 上面的命令来编译它。

如果你的程序是由几个 C++源文件(和几个翻译单元)组成的,你需要将每个翻译单元编译成一个object file, and then to link这些文件来使你的可执行文件.所以对于两个源文件 yourfirstsource.cppyoursecondsource.cpp 你需要 运行:

  • g++ -Wall -Wextra -g -c yourfirstsource.cpp -o yourfirstsource.o 将第一个 yourfirstsource.cpp 编译成 yourfirstsource.o 目标文件。
  • g++ -Wall -Wextra -g -c yoursecondsource.cpp -o yoursecondsource.o编译第二个翻译单元。
  • g++ yourfirstsource.o yoursecondsource.o -o yourprog 到 link 两个目标文件都变成可执行文件。您可能 link 带有 -Ldir-llibname 参数的库(顺序很重要,从更高的级别到低级别库)

实际上,如果您有多个 C++ 文件,最好使用一些 build automation tool, like GNU make or ninja。该工具将像上面那样 运行 编译和 link 命令。 您应该能够在命令行上编译(和link)

使用 gdb

进行调试

一旦您拥有带有调试信息的可执行文件,您就可以使用 gdb 调试器。 阅读 Debugging with GDB 文档。我强烈建议在终端中使用gdb。用 gdb ./yourprog 启动它(如果你想要一个终端界面,或者 gdb -tui ./yourprog ),然后你会得到一个 (gdb) 提示符,你可以输入调试器命令。最有用的是run(或r),break(或b),list(或l),print(或p),backtrace(或bt)。

如果你想直接运行你的程序,输入它的文件路径,例如./yourprog 在命令中(即某些终端)。注意 globbing.

出于基准测试目的,最好让您的 g++ 编译器使用 -O1-O2optimize

但是Code::Blocks

那个工具是一个编辑器,也可以运行上面的g++编译和gdb调试命令。但是您确实需要在命令行上熟悉这些 g++gdb 工具。一旦你可以做到这一点, 进入 Code::Blocks documentation to understand how to configure your source code editor(顺便说一句,我的偏好是 emacs)。

Code::Blocks 无法编译您的代码或调试您的程序。它只是 运行ning 外部程序(例如 g++ 编译器或 gdb 调试器),但您应该首先学习使用 g++gdb你自己(在 Code::Blocks 或任何其他源代码编辑器之外)。


顺便说一句,英特尔制造了一个 proprietary C++ compiler (I heard it is called icc, and you might need to pay for it). And there is also Clang/LLVM, which is (open source or) free software (like GCC,但使用了不同的许可)。它的 clang++ 程序接受类似于 g++ 的参数。在许多情况下,您只需将 g++ 替换为 clang++ 即可使用该 Clang 编译器。

还要注意 $PATH variable。您需要配置您的 shell(可能是您的 ~/.bashrc)来更改它。

我强烈建议学习如何使用一些version control system tool, like git(它有很好的视频和文档,非常强大)。