Как узнать, что функция внутри файла библиотеки .so и как связать конкретный двоичный код в вашем коде? - PullRequest
0 голосов
/ 25 апреля 2019

В Linux есть общие библиотеки. Например, libcap.so.2.24.

Я знал, когда пишу код c, когда пишу что-то вроде

#include <stdio.h>

int main(){
  printf("hello world\n");
  return 0;
}

компиляция gcc автоматически включает функцию printf из библиотеки и создает файл возражений.

Мой вопрос

  1. есть ли другие способы получить двоичный код для printf, кроме использования compile?

  2. когда компиляция включает printf в файл возражений, включает ли она всю библиотеку libcap.so.2.24 или только часть, связанную с функцией printf? Я предполагаю, что он включает только часть, относящуюся к функции printf, если так, как это делает компиляция?

  3. можно ли включить функцию из библиотеки вручную без использования компилятора?

1 Ответ

0 голосов
/ 25 апреля 2019
1) The compiler only includes the header files, not the library itself
2) During linking the library is bound to the executable.
   How this happens depends if static or dynamic linking is used
3) It is possible to bind a library at runtime with the dlopen library function
   and then use dlsym to get a function pointer.
   The dlopen man page has a very nice example
...