Я играю с процедурами связывания и загрузки общих библиотек и пытаюсь узнать о различных способах устранения ошибки загрузки:
error while loading shared libraries: ... : cannot open shared object file: No such file or directory
Мне удалось решить эту проблему, используя LD_LIBRARY_PATH и rpath. Теперь я пытаюсь понять, как использовать ldconfig и как он может решить эту проблему [некоторые из моих веб-источников: 1, 2, 3]
Итак, у меня есть следующие исходные файлы: test.c func1.c func2.c. Вот что я делаю:
- Компиляция их в файлы PIC .obj:
$ gcc -Wall -fPIC -c *.c
- Создание общей библиотеки из объектных файлов с именем «libshared.so» и использованием «soname»:
$ gcc -shared -Wl,-soname,libshared.so -o libshared.so *.o
- Связывание с общей библиотекой, указав GCC, где найти общую библиотеку (
...— это просто аббревиатура пути к моей личной общей библиотеке):
$ gcc -L/home/.../my_shared_library -Wall -o mytest test.c -lshared
- Теперь я пытаюсь запустить его и получаю ошибку загрузки:
./mytest: error while loading shared libraries: libshared.so: cannot open shared object file: No such file or directory
- Поэтому я пытаюсь сказать загрузчику искать в моем личном каталоге файл общей библиотеки:
ldconfig -n home/.../my_shared_library
(Я также пробовал это с: ldconfig -n .-L, когда мой рабочий каталог находится дома/.../my_shared_library)
и попытался запустить его еще раз, но я все еще получаю ту же ошибку. Что я делаю неправильно?