Вы пытаетесь создать общую библиотеку, как если бы она была исполняемым файлом. Это то, что вы хотите:
SONAME = libtsocks.so.1
$(SHLIB): $(OBJS) $(COMMON).o $(PARSER).o
$(SHCC) -shared -Wl,-soname,$(SONAME) $(CFLAGS) $(INCLUDES) -o $(SHLIB) \
$(OBJS) $(COMMON).o $(PARSER).o $(SPECIALLIBS) $(LIBS) -rdynamic
ln -sf $(SHLIB) $(SONAME)
ln -sf $(SONAME) libtsocks.so
Важной частью является добавление -shared
. Я также установил, что у вас есть soname , который вы должны иметь и правильно обрабатывать, если вы хотите, чтобы дистрибутивы Linux собирали вашу библиотеку, но если вы не знаете, что это такое, не беспокойтесь об этом пока вы не дойдете до того, что захотите сделать официальный релиз - в этот момент, время, чтобы прочитать его во всех подробностях. К сожалению, я не знаю хорошего места, на которое можно указать вам.
Это на самом деле не имеет ничего общего с _init
/ _fini
против __attribute__((constructor))
- я удивлен, что это сработало вообще.