Если вы предполагаете, что у вас есть только libfoo.so
, закодированный в C (без заголовочных файлов, которые у вас также должны быть), вы не сможете узнать, например, сигнатура функций внутри, потому что таблица символов общего объекта не содержит никакой информации о наборе (например, ничто, кроме общепринятого мнения, не позволяет библиотеке содержать функцию malloc
, которая добавляет два целых числа и возвращает их сумму вместо выполнения обычное выделение кучи).
Так что libfoo.so
можно злоупотреблять. Однако в некоторых общих библиотеках обычно есть версии, связанные с символами (и вы можете запросить их программным способом через dlvsym , если вы dlopen
добавили библиотеку). Существует несколько способов создания версий.
Если библиотека является чистым C ++, то символы искажены , поэтому их кодировка содержит свою подпись.
Лучше всего иметь внутри вашей библиотеки некоторые функции, которые возвращают версию библиотеки. Посмотрите на информацию о версии glib функции для хорошего примера.