“架构x86_64的未定义符号”-再次小示例

问题描述

我被看似很常见但很神秘的编译错误

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; }