由一个错误引发对这个问题的关注
上面我对于cpp文件利用gcc进行编译时产生的错误,起初我以为时三方库安装版本问题,反复卸载重装,发现仍然没有解决。然后我把目光聚焦到gcc编译这,发现把gcc改成g++,编译就通过了。
g++和 gcc属于GNU 编译器集合 (GNU Compiler Collection, GCC) ,用于编译不同的编程语言。g++ 主要用于编译 C++代码,而 gcc主要用于编译C代码。虽然它们都可以用来编译 C 和 C++ 代码,但在处理和链接方面有一些关键区别。
1.处理
gcc:
当 gcc 处理 C 代码时,它会根据 C 语言的规则优化代码,并应用 C 语言的特定编译选项。如果 gcc 被用于处理 C++ 代码,它不会自动启用某些 C++ 特有的编译选项(如 -lstdc++),这意味着编译的可执行文件可能缺少某些必要的链接步骤。
g++:
g++ 在处理 C++ 代码时,默认会启用与 C++ 相关的编译选项,例如自动链接 C++ 标准库、启用 C++ 特定的警告和优化等。它会确保所有 C++ 特性的正确处理,比如模板实例化、内联函数和异常的处理等。
3. 链接
gcc:
gcc 默认情况下不会自动链接 C++ 标准库(libstdc++),即使编译的是 C++ 代码。这意味着在链接阶段,如果代码中使用了 C++ 标准库的功能(如 std::vector、std::cout 等),必须手动添加链接选项:gcc -o output example.cpp -lstdc++
当 gcc 编译 C 代码时,它只会链接 C 标准库(libc),这是 C 语言项目所需的。
g++:
g++ 在链接阶段会自动链接 C++ 标准库。这意味着你不需要手动指定链接选项,即使代码中使用了 C++ 标准库的功能。g++ 还会处理 C++ 的全局构造函数和析构函数,这是 C++ 程序初始化和清理过程的一部分。
所以,遇到cpp文件编译尽量用g++避免一些不必要的错误。