У меня есть следующие MakefileLinked библиотеки не найдена во время выполнения (C++)
FLAGS = -g -c -Wall -Wextra -O2 -pedantic -Werror
CC = g++
SOURCE = $(wildcard src/*.cpp)
INTERM = $(patsubst %.cpp,%.o,$(SOURCE))
OBJECTS = $(patsubst src/%,nbobj/%,$(INTERM))
RES = app
INCLUDE = -I../../libs
OPENCV = -L/usr/local/lib `pkg-config --cflags --libs opencv`
LINK = -L./../../libs -lgstd $(OPENCV)
$(RES): $(OBJECTS)
$(CC) $(OBJECTS) -o $(RES) $(LINK)
nbobj/%.o: src/%.cpp
$(CC) $(FLAGS) $(INCLUDE) -o [email protected] -c $<
clean:
rm -rf $(RES) $(OBJECTS)
Он отлично компилируется, но при запуске программы я получаю
ошибки при загрузке разделяемых библиотек: libgstd. так: не могу открыть файл разделяет объект: нет такого файла или каталога
в этой связи возникает несколько вопросов для меня:
- libgstd был явно найден во время компиляции (если я удаляю -lgstd, программа не компилируется), а .so не двигался, когда я запускал программу. Как это внезапно больше не найдено?
- Я прочитал много сообщений, которые говорят, что мне нужно изменить ld.conf. Я думал, что точка флага -L должна была точно избегать этого. Я действительно не хочу изменять системный файл для небольшой библиотеки, которую я написал. Также я хочу отправить исполняемый файл и libgstd вместе в одной папке, не заставляя кого-либо «устанавливать» libgstd, возиться с системными файлами.
- Я также прочитал, что флаг -R является эквивалентом -L для времени выполнения, но если я компилирую с -R, компилятор говорит «ошибка: неопознанный параметр„-R“»
Кроме того, я бегу в аналогичной проблемой, когда у меня есть библиотека, которая содержит призыв к «clock_gettime». Он компилируется отлично, но во время выполнения, когда я использую функцию из этой библиотеки, я получаю «неопределенную ссылку на« clock_gettime ». Как это, когда я скомпилировал библиотеку, линкер, по-видимому, нашел clock_gettime, но тогда, когда я использовал библиотеку, его не удалось найти, хотя файлы не были перемещены?
Большое вам спасибо за вашу помощь :)
Благодарим вас за ответ. Что делает флаг -L, если он не указывает компоновщику на поиск в каталоге и почему существует разница между компиляцией и временем выполнения с точки зрения поиска библиотеки? – megavore