Makefile - создать статическую библиотеку - PullRequest
1 голос
/ 07 марта 2012

У меня есть два файла: osm.h и osm.cpp

Я пытался создать из них статическую библиотеку, называемую «libosm.a», с помощью Makefile.

мой файл 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

Может кто-нибудь помочь?

1 Ответ

3 голосов
/ 07 марта 2012

Я полагаю, что файл 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
...