问题描述
我被看似很常见但很神秘的编译错误
Undefined symbols for architecture x86_64:
"_main",referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
我将其缩小为一个很小的实现(来自教程),该实现不会编译。
头文件:Num.h
class Num
{
private:
int num;
public:
Num(int n);
int getNum();
};
实施:Num.cpp
#include "Num.h"
Num::Num(int n): num(n) {}
int Num::getNum()
{
return num;
}
编译命令:
g++ Num.cpp
我在调用堆栈中没有看到任何明显的提示(通过g++ Num.cpp -v
)。
Num.h和Num.cpp都位于同一目录中,所以我不明白为什么链接器无法链接它们。我怀疑我可能需要设置一些环境变量,但是哪个?
任何帮助将不胜感激! 感谢您的耐心等待-我知道此错误已在这里发布了一千次,但是我没有找到适合我的答案。
解决方法
默认情况下,您需要main
函数(从此处开始执行程序)来构建可执行二进制文件。
您可以像使用-c
选项
g++ -c Num.cpp
仅进行编译(无链接)并获取目标文件Num.o
。
作为参考,解决方案是在Num.cpp中添加一个伪main
以便使用g ++进行编译。
#include "Num.h"
int main(){}
Num::Num(int n): num(n) {}
int Num::getNum() { return num; }