Книга: Разработка приложений в среде Linux. Второе издание

27.1.1. Пример

27.1.1. Пример

В главе 8 был представлен пример использования обычной разделяемой библиотеки. Библиотеку libhello.so, которую нам удалось создать, можно загружать во время выполнения. Программа loadhello загружает libhello.so динамически и вызывает функцию print_hello, которая находится в библиотеке.

Ниже показан код loadhello.с.

 1: /* loadhello.с */
 2:
 3: #include <dlfcn.h>
 4: #include <stdio.h>
 5: #include <stdlib.h >
 6:
 7: typedef void (*hello_function) (void);
 8:
 9: int main(void) {
10:  void * library;
11:  hello_function hello;
12:  const char * error;
13:
14:  library = dlopen("libhello.so", RTLD_LAZY);
15:  if (library == NULL) {
16:   fprintf (stderr, "He удается открыть libhello.so: %sn",
17:    dlerror());
18:   exit(1);
19:  }
20:
21:  /* Хотя в данном случае мы знаем, что символ print_hello никогда
22:   * не должен быть равен NULL, при поиске произвольных символов
23:   * все происходит иначе. Поэтому вместо проверки результата функции dlsym()
24:   * мы показываем пример проверки кода, возвращаемого функцией dlerror().
25:   */
26:  dlerror();
27:  hello = dlsym(library, "print_hello");
28:  error = dlerror();
29:  if (error) {
30:   fprintf(stderr, "He удается найти print_hello: %sn", error);
31:   exit(1);
32:  }
33:
34:  (*hello)();
35:  dlclose(library);
36:  return 0;
37: }

Оглавление книги

Оглавление статьи/книги

Генерация: 0.150. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз