【问题标题】:Makefile - implicit entry/start for main errorMakefile - 主要错误的隐式条目/启动
【发布时间】:2015-12-23 21:34:32
【问题描述】:

我从我的 makefile 中得到以下输出。我的主要目标是编译目录中的所有内容。我希望将来会有更多的 cpp 文件。非常感谢任何提示或建议!

输出:

g++ `pkg-config --libs --cflags opencv libexif` main.cpp -o main.o
g++ `pkg-config --libs --cflags opencv libexif` Image.cpp -o Image.o
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Image.o] Error 1

当前文件列表: main.cpp、Image.h、Image.cpp

这是生成文件:

CC=g++
CFLAGS= `pkg-config --libs --cflags opencv libexif`
LDFLAGS= `pkg-config --libs --cflags opencv libexif`
SOURCES=main.cpp Image.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=CvHelloWorld

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm *.o

【问题讨论】:

  • 不应该使用-c 选项编译吗?
  • 附带说明,您可以使用 glob 获取目录中的所有文件名,而无需明确列出它们。

标签: c++ makefile


【解决方案1】:

按照@5gon12eder 的建议,您应该使用'-c'。

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

如果您更早地解释 pkg-config 结果,调试会更容易:

CFLAGS  := $(shell pkg-config --cflags opencv libexif)
LDFLAGS := $(shell pkg-config --libs opencv libexif)
SOURCES := $(wildcard *.cpp)

[...]

.PHONY: clean

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多