Моя программа не может найти мою общую библиотеку во время выполнения

#c #shared-libraries

Вопрос:

Моя программа не может найти мою общую библиотеку во время выполнения.
Вот как я все собрал:

 //shared library fct
g   -c -fpic fct.cpp
g   -shared fct.o -o libfct.so

//my program
g   main.cpp -L/home/user/shared_library/ -lfct -I/home/user/shared_library/ -o main
 

Когда я попытался запустить программу, она выдает мне это сообщение об ошибке:

 ./main: error while loading shared libraries: libfct.so: cannot open shared object file: No such file or directory
 

вот мои исходные файлы:

main.cpp:

 #include <iostream>
#include "fct.h"

int main()
{
   fct();

   return 0;
}
 

fct.h:

 #ifndef FCT_HEADER_INCLUDED
#define FCT_HEADER_INCLUDED

#include <iostream>

void fct();

#endif
 

fct.cpp:

 #include "fct.h"

void fct()
{
    std::cout << "fct() was called!n";
}
 

Комментарии:

1. Я предполагаю, что вы дважды проверили это fctlib.so находится в /home/user/shared_library, верно?

2. @AlessandroTeruzzi Да. Файл библиотеки был создан.

Ответ №1:

Путь к общей библиотеке необходим дважды, как во время компиляции, так и во время выполнения. Передача пути к библиотеке компилятору не гарантирует, что компоновщик сможет его найти. Для временного решения вы можете добавить home/user/shared_library переменную LD_LIBRARY_PATH среды (в Linux и macOS). Для более постоянного решения вам следует установить его в каталог по пути поиска динамического компоновщика по умолчанию.

Комментарии:

1. Спасибо! Я не знал, что мне также придется сообщать путь во время выполнения.