【问题标题】:CLion Linker Error with Standard Library and GCC标准库和 GCC 的 CLion 链接器错误
【发布时间】:2020-05-14 08:43:42
【问题描述】:

我正在学习一个需要使用 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 上运行。谢谢你的帮助。

【问题讨论】:

    标签: c++ gcc compiler-errors clion undefined-symbol


    【解决方案1】:

    确保在设置->“构建、执行、部署”->“C++ 编译器”下以 g++ 编译器为目标(例如:/opt/local/bin/g++)。对于 C++ 代码,您需要使用 g++ 编译器,而 gcc 编译器适用于 C 代码,这就是为什么您会收到 C++ 标准库函数的链接器错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      相关资源
      最近更新 更多