在crt1.o函数_start中未定义对“主要”错误的引用

问题描述

|| 我的Makefile遇到问题。 我正在尝试从2个文件创建一个程序-包含main函数的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:在函数\'_ start \'中:   (.text + 0x20):对\'main \'的未定义引用 如果在$(TARGET)行中切换modules.o和main.o的顺序,那么我会得到错误消息,说“未定义引用”是在main.cpp中modules.c中定义的函数。 我不知道怎么了。 谢谢。 问候, 雷恩     

解决方法

这里有一些提示: .o文件不需要
-o $@ $<
,因此请将其从这些目标中删除。 while2ѭ在编译时不链接时更有意义。因此,我将其添加到
CC
CXX
行(或者更好的是将其添加到
CFLAGS
CXXFLAGS
)。 clean目标应该是“ 7”目标的依赖项,以便您可以始终执行它(无需先前检查已更改的依赖项)。 如果仍然收到关于在modules.c中缺少对函数的引用的错误,则可能是在main.cpp中缺少了一些“ 8”语句。那是因为C ++函数的内部名称与C函数的内部名称计算方法不同(我认为C ++在所有名称之前都使用名称空间,类名称等)。要告诉C ++使用旧的内部名称进行链接可以找到特定的功能,请使用extern \“ C \”语句。     ,使用$ ^代替$ <。后者仅包含第一个依赖项(modules.o),因此main.o未链接到可执行文件中。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...