GCC和make:从crt1.10.6.o引用的未定义符号“_main”

时间:2014-08-15 10:05:04

标签: 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 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[]);

我的*.mm文件:

#include <myheader.h>

//methods and variable declarations and definitions here

int main(int argc, char * argv[]){
    //code here
    return 0;
}

1 个答案:

答案 0 :(得分:1)

以下是makefile的固定版本:

# makefile

CC = gcc

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

SOURCES = myfile.mm

LDFLAGS = $(LIBRARIES) $(FRAMEWORKS)

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