在为 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.cpp
和 yoursecondsource.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 带有 -L
dir 和 -l
libname 参数的库(顺序很重要,从更高的级别到低级别库)
实际上,如果您有多个 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
或 -O2
等 optimize
但是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(它有很好的视频和文档,非常强大)。
我想使用 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.cpp
和 yoursecondsource.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 带有-L
dir 和-l
libname 参数的库(顺序很重要,从更高的级别到低级别库)
实际上,如果您有多个 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
或 -O2
等 optimize
但是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(它有很好的视频和文档,非常强大)。