Например, $ LC_ALL=C comm -12 \ <(/usr/lib/rpm/provided_symbols /usr/lib6/libsane.so.1.0.27) \ <(/usr/lib/rpm/provided_symbols /usr/lib64/sane/libsane-test.so.1.0.27) md5_buffer md5_finish_ctx md5_init_ctx md5_process_block md5_process_bytes md5_read_ctx md5_stream sane_cancel sane_close sane_control_option sane_exit sane_get_devices sane_get_option_descriptor sane_get_parameters sane_get_select_fd sane_init sane_open sane_read sane_set_io_mode sane_start sane_strstatus sanei_check_value sanei_config_get_paths sanei_config_get_string sanei_config_open sanei_config_read sanei_config_skip_whitespace sanei_configure_attach sanei_constrain_value sanei_debug_msg sanei_debug_sanei_config sanei_debug_sanei_debug sanei_debug_sanei_thread sanei_init_debug sanei_thread_begin sanei_thread_get_status sanei_thread_init sanei_thread_is_forked sanei_thread_is_valid sanei_thread_kill sanei_thread_sendsig sanei_thread_waitpid
Так задумано, что portable-слой собирается внутри статической библиотекой, которая линкуется к каждому модулю. Линковаться с libsane у модулей не принято. Видимо, потому что это libsane подгружает модуль, и никаких требований к этому модулю не предъявляется (касательно версии libsane). В совокупности выглядит как средство обеспечить высокий уровень переносимости модулей. $ cd lib $ ls -1 alloca.c getenv.c getopt1.c getopt.c inet_ntop.c inet_pton.c Makefile.am md5.c sigprocmask.c sleep.c snprintf.c strcasestr.c strdup.c strndup.c strsep.c syslog.c usleep.c vsyslog.c $ cat Makefile.am ## Makefile.am -- an automake template for Makefile.in file ## Copyright (C) 2009 Chris Bagwell and Sane Developers. ## ## This file is part of the "Sane" build infra-structure. See ## included LICENSE file for license information. AM_CPPFLAGS += -I. -I$(top_builddir)/include -I$(top_srcdir)/include noinst_LTLIBRARIES = liblib.la liblib_la_SOURCES = md5.c liblib_la_CPPFLAGS = -I$(top_srcdir)/include liblib_la_LIBADD = $(LTALLOCA) $(LTLIBOBJS)
Ошибка в дизайне библиотеки - это же ещё большая ошибка, чем оплошность в реализации.