Я пытаюсь скомпилировать несколько файлов .c, которые использовали функции msgpack-c в общей библиотеке. У меня есть следующие Makefile:Как правильно связать msgpack в общей библиотеке
MSGPACK_CS = msgpack.c
CFLAGS = -std=c99
MSGPACK_OBJECTS = $(subst .c,.o,$(MSGPACK_CS))
MSGPACK_LIBS = msgpack.so
all: $(MSGPACK_OBJECTS) $(MSGPACK_LIBS)
%.o: %.c
$(CC) -c -shared -fPIC $(CFLAGS) $<
$(MSGPACK_LIBS): $(MSGPACK_OBJECTS)
ld -Lmsgpack/.libs -share -o [email protected] $(MSGPACK_OBJECTS) -lmsgpack
я могу скомпилировать программу, которая использует msgpack без проблем, но это дает мне следующую ошибку:
msgpack.o: In function `msgpack_pack_int64':
/usr/local/include/msgpack/pack_template.h:373: undefined reference to `__stack_chk_fail_local'
ld: msgpack.so: hidden symbol `__stack_chk_fail_local' isn't defined
ld: final link failed: Bad value
Видимо процесс сцепления не идет хорошо, но Я не знаю, что не так. Что я могу сделать?
Спасибо, это сработало просто отлично! Только одно: флаг «-share» на самом деле «разделен», но он делает то, что ожидается, а именно для создания общей библиотеки. Опять же, спасибо – petermlm
Спасибо. Я установил этот «-shared» -typo. Моя вина. – mfro