Есть ноутбук, на котором у меня нет привилегий root.
на машину У меня установлена библиотека с использованием configure --prefix=$HOME/.usr
.
после этого я получил эти файлы в ~/.usr/lib
:
libXX.so.16.0.0
libXX.so.16
libXX.so
libXX.la
libXX.a
когда я компилирую программу, которая вызывает одну из функций, предоставляемых библиотекой, с помощью этой команды:
gcc XXX.c -o xxx.out -L$HOME/.usr/lib -lXX
xxx.out был сгенерирован без предупреждения, но когда я его запускаю, выдается сообщение об ошибке:
./xxx.out: error while loading shared libraries: libXX.so.16: cannot open shared object file: No such file or directory
, хотя libXX.so.16
находится там.
мое предположение о том, что ~/.usr/lib
не был найден при вызове xxx.out.
но что я могу сделать, чтобы указать путь .so, чтобы xxx.out мог искать там файл .so?
Кроме того, когда я передаю -static
в gcc, возникает следующая ошибка:
undefined reference to `function_proviced_by_the_very_librar'
Кажется, .so
не имеет значения, даже если -L
и -l
переданы gcc.
что я должен сделать, чтобы создать полезный exe-файл с этой библиотекой?
Для других людей, у которых тот же вопрос, что и у меня
Я нашел полезную статью на tldp об этом.
В нем представлена статическая / общая / динамически загружаемая библиотека, а также пример кода для их использования.