【发布时间】:2020-11-23 01:03:35
【问题描述】:
我确信这是一个 C++ 菜鸟问题,只是反映了我的理解不足。
我有一个文件
A.cxx 包含,
#include "Rishab.h"
#include <future>
void functionToRun() {
while (true) {
Rishab::hello();
}
}
int main() {
std::future<void> futureVariable = std::async(std::launch::async, functionToRun);
}
Rishab.h
#ifndef __METRIC_RISHAB_H__
#define __METRIC_RISHAB_H__
class Rishab {
public:
static void hello();
};
#endif
Rishab.cxx
#include "Rishab.h"
void Rishab::hello() {
}
当我尝试编译它时,链接器会抛出错误,
Undefined symbols for architecture x86_64:
"Rishab::hello()", referenced from:
functionToRun() in A.cxx.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
PS:这些文件是更大项目的一部分,所以有一个 Makefile。
我已经在网上查看了其他答案,但其中大多数都迎合static variable 未定义(仅声明)。但我的问题涉及static function
【问题讨论】:
-
而执行链接器的实际命令是...?
-
错误信息告诉您,链接器在尝试为每个翻译单元(即每个包含源代码的文件),它无法解析函数
void Rishab::hello()的存在。这很可能意味着您实际上并未在调用链接器的过程中提供已编译的Rishab.cxx文件中的目标代码。因此,它不知道这个函数是在哪里实现的。 -
找到了。对不起这个愚蠢的问题。有一个 CMakeLists.txt,必须在其中添加文件 Rishab.cxx。现在它起作用了。如果@paddy 你发布你的答案,我可以接受答案。上面的评论为我解决了这个问题。
标签: c++ c++11 static static-methods