c++ - crt1.o函数_start中未定义对 'main'错误的引用

标签 c++ c makefile

我的 Makefile 有问题。

我正在尝试从 2 个文件创建程序 - 包含主函数的 main.cpp 和包含在 main() 中调用的函数定义的 modules.c。 modules.c 只包含函数定义,没有主函数。

我的Makefile如下:

CC := gcc
CXX := g++
LINK := g++ -Wall
CFLAGS := -g
CXXFLAGS := -g

TARGET = program

$(TARGET): modules.o main.o
   $(LINK) -o $@ $< -lpcap

clean:
   rm *.o $(TARGET)

modules.o:
   $(CC) $(CFLAGS) -c modules.c -o $@ $<

main.o:
   $(CXX) $(CXXFLAGS) -c main.cpp -o $@ $<

我在 main.cpp 中包含了“modules.h”,其中包含所有函数声明。 CFLAGS 和 CXXFLAGS 变量指向包含

的正确路径

当我尝试使用这个 Makefile 时,出现错误

/usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../lib64/crt1.o: In function '_start':
(.text+0x20): undefined reference to 'main'

如果我在我的 $(TARGET) 行中切换 modules.o 和 main.o 的顺序,那么我会收到错误消息,指出“ undefined reference ”我在 modules.c 和 main.cpp 中定义的函数。

不知道怎么回事

谢谢。

问候, 雷恩

最佳答案

使用 $^ 而不是 $<。后者仅包含第一个依赖项 (modules.o),因此 main.o 未链接到可执行文件中。

关于c++ - crt1.o函数_start中未定义对 'main'错误的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646457/

相关文章:

c++ - 让 GraphViz 作为 C++ 库工作的困难

c++ - 为什么不分配内存就能正常工作

c++ - 我应该为 map 中的两个智能指针对制作自己的比较器吗?

c - 获取内核中的System32目录

生成文件: find recursively and delete auxiliary files

c - Gtk 与 Eclipse CDT

c++ - 为什么 GetProcAddress 不起作用?

c - 堆栈帧在我的函数中是什么样子的?

C 函数返回指向指针的指针

makefile - QMake:构建后执行脚本