#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. Спасибо! Я не знал, что мне также придется сообщать путь во время выполнения.