Компиляция исходного файла.c и динамической библиотеки.so
Я пытался скомпилировать исходный файл C (driver.c) с методом main с файлом динамической библиотеки (libhello.so), который имеет все реализации функций, используемых в методе main.
Я делаю.so файл с
gcc -shared -o libhello.so -fPIC hello.c
Он прекрасно компилируется и возвращает файл в каталоге, как и ожидалось.
Затем я пытаюсь скомпилировать файл driver.c с динамической библиотекой libhello.so
gcc driver.c libhello.so -o driver
Он компилируется без жалоб, и проблема возникает, когда я пытаюсь запустить исполняемый "драйвер". Я получаю следующую ошибку:
./driver: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory
Я запутался, потому что файл буквально прямо там, в каталоге, в котором он компилируется. Может кто-нибудь объяснить это для меня?
2 ответа
На самом деле вы не динамически связываете с libhello.so. Вам нужна опция -l. -lhello Вы можете проверить зависимости с драйвером ldd (ваш exec).
В отношении:
gcc driver.c libhello.so -o driver
не является правильным.
Это должно быть похоже на:
gcc driver.c -o driver -L. -lhello
конечно, должен быть заголовочный файл, который содержит все прототипы и т. д. для библиотеки libhello.so
Этот заголовочный файл обычно имеет имя: hello.h, поэтому последний оператор compile + link будет иметь вид:
gcc driver.c -o driver -I. -L. -lhello <<< edited
Я сделал ошибку, в последней строке параметра '-I' должен быть указан каталог для файла заголовка, а не имя файла заголовка