我有两个文件:osm.h和osm.cpp
我尝试使用Makefile创建静态库,名为“libosm.a”。
我的cpp和h文件工作(我编译它们没有Makefile),但我的Makefile不起作用。这是Makefile:
CC = g++
RANLIB = ranlib
LIBSRC = osm.cpp
LIBOBJ=$(LIBSRC:.cpp=.o)
CFLAGS = -Wall -g -O0
LOADLIBES = -L./
OSMLIB = libosm.a
TARGETS = $(OSMLIB)
all: $(TARGETS)
osm.o: osm.cpp osm.h
$(CC) -c osm.cpp -o osm.o
$(TARGETS): $(LIBOBJ)
ar rcs $(OSMLIB) osm.o
ranlib $(OSMLIB)
clean:
rm osm.o $(TARGETS) $(OSMLIB) $(LIBOBJ)
depend:
makedepend -- $(CFLAGS) -- $(SRC) $(LIBSRC)
这是我得到的错误的一部分:
osm.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
任何人都可以帮忙吗?
答案 0 :(得分:3)
我相信一个简单的make文件就可以完成这项工作
LIBSRC = osm.cpp
OSMLIB = libosm.a
CFLAGS = -Wall -g -O0
LOADLIBES = -L./
$(OSMLIB): $(LIBSRC)
只需使用GNU make的内置规则。您真的根本不想将CC设置为g++
。 如果,那么gcc
将为您选择合适的后端。
注意:要查看make
的内置规则,请使用此选项:
make -pn -f /dev/null