Создание простого Makefile для создания разделяемой библиотеки

Я пытаюсь создать очень простой созданный вручную Makefile для создания общей библиотеки для иллюстрации точки.

Вот что у меня есть на данный момент:

SHELL = /bin/sh
CC    = gcc
FLAGS        = -std=gnu99 -Iinclude
CFLAGS       = -fPIC -pedantic -Wall -Wextra -march=native -ggdb3
DEBUGFLAGS   = -O0 -D _DEBUG
RELEASEFLAGS = -O2 -D NDEBUG -combine -fwhole-program

TARGET  = example.so
SOURCES = $(shell echo src/*.c)
HEADERS = $(shell echo include/*.h)
OBJECTS = $(SOURCES:.c=.o)

PREFIX = $(DESTDIR)/usr/local
BINDIR = $(PREFIX)/bin

all: $(TARGET)

$(TARGET): $(OBJECTS)
    $(CC) $(FLAGS) $(CFLAGS) $(DEBUGFLAGS) -o $(TARGET) $(OBJECTS)

Когда я запускаю make , он пытается создать приложение - и ld терпит неудачу, потому что не может разрешить main () .

Проблема, похоже, связана с CFLAGS - я указал -fPIC , но это не работает - что я делаю не так?

Править

Я добавил -shared , как было предложено, когда я запускаю make , я получаю эту ошибку:

gcc -std=gnu99 -Iinclude -fPIC -shared -pedantic -Wall -Wextra -march=native -ggdb3 -O0 -D _DEBUG -o example.so src/example.o
/usr/bin/ld: src/example.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
src/example.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [example.so] Error 1

Что, похоже, предлагает вернуться только к -fPIC .

Кстати, моя новая настройка CFLAGS :

CFLAGS       = -fPIC -shared -pedantic -Wall -Wextra -march=native -ggdb3

Я запускаю gcc v4.4.3 на Ubuntu 10.0.4.

30
задан Rodrigo de Azevedo 4 July 2018 в 11:55
поделиться