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