Makefile-创建一个静态库

Makefile - to create a static library

本文关键字:一个 静态 创建 Makefile-      更新时间:2023-10-16

我有两个文件:osm.h和osm.cpp

我试图用Makefile从它们创建静态lib,称为"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

有人能帮忙吗?

我相信像这样简单的make文件可以完成的工作

LIBSRC = osm.cpp
OSMLIB = libosm.a
CFLAGS = -Wall -g -O0
LOADLIBES = -L./
$(OSMLIB): $(LIBSRC)

只需使用GNU的内置规则即可。而且您实际上根本不想将CC设置为g++如果,则转到gcc,后者将为您选择合适的后端。

注意:要查看make的内置规则,请使用以下内容:

make -pn -f /dev/null