GCC和make:未定义符号“_“主要”;参考crt1.10.6.o

GCC和make:未定义符号“_“主要”;参考crt1.10.6.o,gcc,Gcc,如何同时编译头文件和*.mm文件,以便使用make从命令行生成可执行文件 这是我的makefile CC=gcc FRAMEWORKS:= -framework Foundation LIBRARIES:= -lobjc SOURCE=myheader.h LDFLAGS=$(LIBRARIES) $(FRAMEWORKS) OUT=-o execName all: $(CC) $(LDFLAGS) $(OUT) 当我运行make时,我得到以下输出: Undefined sym

如何同时编译头文件和
*.mm
文件,以便使用
make
从命令行生成可执行文件

这是我的
makefile

CC=gcc

FRAMEWORKS:= -framework Foundation
LIBRARIES:= -lobjc

SOURCE=myheader.h

LDFLAGS=$(LIBRARIES) $(FRAMEWORKS)
OUT=-o execName

all:
    $(CC) $(LDFLAGS) $(OUT)
当我运行
make
时,我得到以下输出:

Undefined symbols:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [all] Error 1
关于这个问题的所有其他帖子的唯一答案是代码不包含
main()
方法。然而,我有一个主要的方法

我的头文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#import <Foundation/Foundation.h>

//declarations for an enum and methods here

int main(int argc, char * argv[]);

以下是makefile的固定版本:

# makefile

CC = gcc

CFLAGS = -Wall
FRAMEWORKS = -framework Foundation
LIBRARIES = -lobjc

SOURCES = myfile.mm

LDFLAGS = $(LIBRARIES) $(FRAMEWORKS)

execName: $(SOURCES)
    $(CC) $(CFLAGS) $(SOURCES) $(LDFLAGS) -o $@

makefile中的任何地方都没有对.mm文件的引用,因此无法对其进行编译。是否要将
myheader.h
替换为
myfile.mm
?我用逗号把它们分开吗?我以前从未使用过
make
。我发布了一个带有固定版本makefile的答案。我收到了很多关于Obj-C类没有“在此范围内声明”的错误,以及关于Obj-C指针前面的*的错误。我可以在哪里发布输出以进行分析?您需要发布一个新问题,以及相关的源代码和错误消息,因为这些是编译错误,可能与您的makefile无关。我想指出,如果我将头文件的重要部分移到源文件中,我会收到不同的警告(不止一个,但它们都很相似):
/System/Library/Frameworks/Foundation.framework/Headers/NSURLError.h:62:错误:“kcfurlerrorconcelled”未在此范围内声明
# makefile

CC = gcc

CFLAGS = -Wall
FRAMEWORKS = -framework Foundation
LIBRARIES = -lobjc

SOURCES = myfile.mm

LDFLAGS = $(LIBRARIES) $(FRAMEWORKS)

execName: $(SOURCES)
    $(CC) $(CFLAGS) $(SOURCES) $(LDFLAGS) -o $@