Это ответ на проблему для OS X.
Mac ld
не поддерживает --exclude-libs
, но поддерживает -exported_symbol sym
и применяет , применяет это к объектным файлам в статических библиотеках. И когда вы фильтруете в общедоступный API, белый список достаточно мал, чтобы разобрать его.
В моем Makefile я получил следующее, чтобы сгенерировать флаг -Wl,-exported_symbol,_api_func_1
для каждого экспортируемого символа:
SYMBOLS = api_func_1 api_func_2 api_func_3 api_func_4
SYMBOLS += api_func_5 # add more as necessary
COMMA = ,
LDFLAGS += $(addprefix -Wl$(COMMA)-exported_symbol$(COMMA)_,$(SYMBOLS))
# ...
libmyapi.so: # ...
$(CC) -shared -o $@ ... $(LDFLAGS)
Затем вы можете if-gate между этой версией флагов и версией GNU ld после определения, какой компоновщик имеет система.