Компиляция исходного файла.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' должен быть указан каталог для файла заголовка, а не имя файла заголовка

Другие вопросы по тегам