Статическая библиотека - это просто архив несвязанных объектных файлов (.o
) (с индексом для ускорения поиска компоновщиком символов в нем).Когда вы ссылаетесь на такую библиотеку, компоновщик берет каждый неразрешенный символ и пытается найти его там.Если он находит его, он извлекает соответствующий объект и добавляет его в коллекцию для ссылки.Так что нет, вы не можете сказать, приходит ли символ из статической библиотеки .
Если у вас есть другой экземпляр библиотеки, который достаточно близок к тому, с чем был связан исполняемый файл, вы можете посмотретькакие символы он определяет и чем предполагает, что все эти символы, а также любые символы, от которых он зависит, взяты из библиотеки.
Конечно, можно определить символы, определенные в общей библиотеке, потому что это остается другим файлом.
Но есть еще один момент: наиболее вероятно незаконно предоставить бинарный файл Linux без статически связанных источников с libc.То есть, это определенно незаконно, если этот libc является GNU Libc, потому что он распространяется на условиях LGPL, и LGPL требует предоставления (по запросу) источников всего производного кода, за исключением кода, который связан с ним динамически .Если он использует другой libc, такой как sourceware newlib или bionic libc (Android) (я не могу найти другого).Однако я не уверен, насколько хорошо такой код будет работать в системе на основе GNU libc.