(.text+0x20):尝试编译文件时未定义对"main".cpp引用
(.text+0x20): undefined reference to `main' When trying to Compile .cpp file
当试图用位于不同文件夹中的名为normalize的.h文件编译名为rat的.cpp文件时(rat.h与rat.cpp在同一文件夹中),我正在键入
g++ -I/opt/cis/include/ -I/opt/cis/lib/ rat.cpp
我在.cpp文件本身中包含了一个int main(),并完全注释掉了.h文件和.cpp文件的内部工作,只是为了尝试正确编译。
.h文件(不包括注释项目)
1 #ifndef RAT_H
2 #define RAT_H
3 #include <iostream>
4 #include <string>
5
6 class Rat {
7 friend std::ostream &operator<<(std::ostream &, const Rat &);
8 friend std::istream &operator>>(std::istream &, Rat &);
9 private:
10 double n,d;
11 public:
12 Rat(): n(0), d(1) {}
13 };
14. #endif
.cpp文件
1 #include <iostream>
2 #include <cstdlib>
3 #include <string>
4 #include <sstream>
5 #include "rat.h"
6 #include "normalize.h"
7 using namespace std;
8 #ifdef TEST_RAT
9 int main() {};
10 #endif
我做错了什么?很抱歉,如果这是显而易见的。
只有定义了宏TEST_RAT
时,main
函数才存在。任一:
- 将
-DTEST_RAT
添加到编译器CFLAGS - 在
#ifdef
之前添加行#define TEST_RAT
- 在.cpp中删除
#ifdef TEST_RAT
和#endif
对
您忘记了:
#define TEST_RAT
这在您的代码中没有定义,所以现在应该可以工作了。
由于您将main()
放在#ifdef
中,因此如果未定义TEST_RAT
,则会忽略它。由于没有main
,因此无法创建可执行文件(没有入口点),g++
失败并显示错误。
很可能您想把它放在main中(以确保Rat类已定义):
#ifdef RAT_H
int main() {};
#endif
另一个选项是-c
标志:,因为还没有人提到它
g++ -c -I/opt/cis/include/ -I/opt/cis/lib/ rat.cpp
这将把rat.cpp编译为对象文件rat.o,而不需要试图将其链接到程序中(因此需要main
)。
如果您正在测试正确性,您可能还想尝试-W
或-Wall
以获得警告。
相关文章:
- C++/生成文件错误:未定义对"main"的引用
- 在 Linux 上编译 - 在函数 '_start' 中:(.text+0x20):对 'main' 的未定义引用
- crt1.o:在函数"_start"中:(.text+0x20):对"main"的未定义引用
- main.cpp:(.text+0x8ea):在C++中未定义的引用
- main.cpp:(.text+0x8f):对[对象方法]的未定义引用
- 从 crt1.o 对 main 的未定义引用
- 对"main"的未定义引用 - 但包括 main 函数
- main.cpp :(.text 0x5f):未定义的引用
- 尝试使用 MinGW 编译 Assembly + C++:ccqKAvXJ.o:main.cpp:(.text+0x18):对 'GetMagicNumber' 的未定义引用
- 在Linux上使用makefile,使用Boost和MPI对"main"的未定义引用
- QT Subdir-未定义对main的引用-错误
- 为什么在包含类头的情况下,我的数组在main中未定义
- 生成文件错误:未定义对 main 的引用
- 代码块中对 main 的未定义引用
- OpenCV, XCode 中的链接错误, 架构的未定义符号 x86_64: "_cvHaarDetectObjects" , 引用自: _main in main.o
- main.c:(.text+0x30):对"互惠"的未定义引用
- 未能创建第一个库`对“main”的未定义引用
- g++ 链接问题:在函数 '_start' 中: (.text+0x20):对 'main' 的未定义引用
- LoopFillZerobss对main有一个未定义的引用
- 编译时对"main"的 C++ 未定义引用