【发布时间】:2015-04-14 14:26:24
【问题描述】:
我正在测试 CLion IDE,并且正在尝试编写一个最小的 C++ 程序。这是我的代码:
在 main.cpp 中:
#include "classings.h"
int main() {
classings s;
s.doSomething();
return 0;
}
在classings.h中:
class classings {
public:
void doSomething();
};
在classings.cpp中:
#include <string>
#include <iostream>
#include "classings.h"
void classings::doSomething() {
std::cout << "hei" << std::endl;
}
我不知道为什么这会给我这个错误:
Undefined symbols for architecture x86_64:
"classings::doSomething()", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我使用的是 OSX 10.10。
【问题讨论】:
-
您的包含与它无关。 “未定义的符号”是一个链接器错误——你需要告诉链接器要链接哪些库。
-
但是我不需要库来链接这个简单的程序。
-
@HenrikHillestadLøvold:同意,并没有真正检查您的代码。但是,仍然是 linker 抱怨。
classings::doSomething()在 classings.cpp 中定义,链接器在_main中停止,在 main.cpp 中定义。您确定您的链接器可以看到两个翻译单元吗?你提到了 CMake。您的 CMakeLists.txt 中有 classings.cpp 吗? -
实际上,我通常不鼓励初学者使用 IDE。您与 IDE 的细节做太多的斗争,而没有充分了解事物的一般工作原理。 IDE 非常适合朝九晚五的工作,但要学习绳索,请一直使用命令行。在 IDE 将其自动化之前了解编译器/链接器/makefile 的工作原理。 (实际上,我从隧道的另一端走出来,今天使用 Vim 和手工制作的 CMake 设置更有效率。;-))