C++ 未定义对'的引用;主要';crt1.o函数启动时出错

C++ 未定义对'的引用;主要';crt1.o函数启动时出错,c++,c,makefile,C++,C,Makefile,我的Makefile有问题 我试图从两个文件创建一个程序-main.cpp,其中包含main函数,modules.c,其中包含main()中调用的函数的定义。modules.c只包含函数定义,不包含主函数 我的Makefile如下所示: CC := gcc CXX := g++ LINK := g++ -Wall CFLAGS := -g CXXFLAGS := -g TARGET = program $(TARGET): modules.o main.o $(LINK) -o $@

我的Makefile有问题

我试图从两个文件创建一个程序-main.cpp,其中包含main函数,modules.c,其中包含main()中调用的函数的定义。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 $@ $<
CC:=gcc
CXX:=g++
链接:=g++-Wall
CFLAGS:=-g
CXXFLAGS:=-g
目标=程序
$(目标):modules.o main.o
$(链接)-o$@$<-lpcap
清洁:
rm*.o$(目标)
模块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:在函数“_start”中:
(.text+0x20):对“main”的未定义引用

如果在$(TARGET)行中切换modules.o和main.o的顺序,则会出现错误,显示“未定义引用”main.cpp中modules.c中定义的函数

我不知道怎么了

多谢各位

问候,,
Rayne使用$^而不是$以下是一些提示:


  • -o$@$这解决了“未定义对main的引用”问题。但是现在我在main.cpp error中得到了modules.c中定义的函数的“undefined reference”。在main.cpp中,我包含了modules.h,并将modules.c中的函数声明为外部函数。也可以尝试用g++编译c代码(如果只是为了测试)。C++有一些有趣的名字规则,可能会在这里发生冲突。如果这能解决问题,那么看看“extern”C吧。当我把
    gcc-pipe
    拼错为
    gcc-pie
    时,我也遇到了类似的问题。。。