c++ - 标准库和 GCC 的 CLion 链接器错误
问题描述
我正在学习一个需要使用 GCC 作为编译器的类。我正在尝试确保 CLion 正在使用 GCC,但无论我做什么,在尝试运行我的文件时都会不断收到以下错误:
Scanning dependencies of target Sandbox
[ 50%] Building CXX object CMakeFiles/Sandbox.dir/main.cpp.o
[100%] Linking CXX executable Sandbox
Undefined symbols for architecture x86_64:
"std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))", referenced from:
printSquare(double) in main.cpp.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(double)", referenced from:
printSquare(double) in main.cpp.o
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in main.cpp.o
"std::ios_base::Init::~Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in main.cpp.o
"std::cout", referenced from:
printSquare(double) in main.cpp.o
"std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
printSquare(double) in main.cpp.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
printSquare(double) in main.cpp.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[3]: *** [Sandbox] Error 1
make[2]: *** [CMakeFiles/Sandbox.dir/all] Error 2
make[1]: *** [CMakeFiles/Sandbox.dir/rule] Error 2
make: *** [Sandbox] Error 2
这是我用来测试 GCC 的非常简单的 main.cpp 文件:
#include <iostream>
using namespace std;
double square(double x) {
return x * x;
}
void printSquare(double x) {
cout << "The square of " << x << " is " << square(x) << endl;
}
int main() {
printSquare(10.9);
}
以及我的 CMakeLists.txt 文件:
project(Sandbox)
set(CMAKE_CXX_STANDARD 14)
add_executable(Sandbox main.cpp)
在首选项中,在构建、执行、部署下 | 工具链 | C++ 编译器,路径为/usr/local/bin/gcc-9
.
我曾尝试使用 Homebrew 更新并重新安装 GCC,但我在网站上找不到任何其他有类似问题的问题。我在 MacOS Catalina 10.15.2 上运行。感谢您的帮助。
解决方案
确保在 Settings->"Build, Execution, Deployment"->"C++ Compiler" 下定位 g++ 编译器(例如:/opt/local/bin/g++)。您需要将 g++ 编译器用于 C++ 代码,gcc 编译器用于 C 代码,这就是为什么您会收到 C++ 标准库函数的链接器错误。
推荐阅读
- html - 导航栏背景图像仍然被背景颜色覆盖
- owl - Protege:用类型替换一个类
- angular - Typescript 指令出错:VS2017 中的“断点已设置但尚未绑定”
- .net - CLR 无法在 UWP 中创建基于 .NET 的 COM 对象
- wpf - Xaml 在按钮内对齐文本和图像
- javascript - 如何将 puppeteer 浏览器设置为变量?
- html - 我有一个奇怪的 id 进入我的代码,导致元素之间的间距
- python - 任何类型变量的真值评估
- java - Maven:我不想在 .m2 目录中下载默认的 junit jar
- c++ - 在 constexpr 函数中考虑舍入模式