добавление пути к общей библиотеке в Makefile
Я хочу добавить путь к общей библиотеке в мой Makefile. Я ввел команду export в makefile, она даже вызывается, но мне все равно нужно вручную экспортировать ее снова. Каков правильный подход?
Makefile:
SOURCES = kwest_main.c fusefunc.c dbfuse.c logging.c dbbasic.c dbinit.c dbkey.c metadata_extract.c plugins_extraction.c import.c
LIBS = -L$(LIB) -lfuse -lsqlite3 -lkw_taglib -ltag_c -ltag -Wl,-rpath=.
INCLUDE = ../include
LIB = ../lib
EXE = kwest
CC = gcc
CCFLAGS = -g -Wall -Wextra -std=gnu99 -pedantic-errors -I$(INCLUDE)
OFLAGS = -c
ARCH = $(shell getconf LONG_BIT)
X = -D_FILE_OFFSET_BITS=$(ARCH)
OBJECTS = $(SOURCES:.c=.o)
$(EXE) : $(OBJECTS)
$(CC) -o $(EXE) $(OBJECTS) $(LIBS)
%.o: %.c
$(CC) $(OFLAGS) $(CCFLAGS) $<
fusefunc.o: fusefunc.c
$(CC) $(OFLAGS) $(CCFLAGS) $< $X
kwest_libs: kw_taglib
--->export LD_LIBRARY_PATH=$(LIB):$LD_LIBRARY_PATH
kw_taglib: plugin_taglib
plugin_taglib: plugin_taglib.o kwt_upd_meta.o
gcc -g -shared -I$(INCLUDE) -Wl,-soname,libkw_taglib.so -o $(LIB)/libkw_taglib.so -ltag -ltag_c plugin_taglib.o kwt_upd_meta.o
plugin_taglib.o:
gcc -c -g -I$(INCLUDE) -Wall -Wextra -pedantic-errors -std=gnu99 -fPIC -ltag_c -c plugin_taglib.c
kwt_upd_meta.o:
g++ -c -g -I$(INCLUDE) -Wall -Wextra -pedantic-errors -fPIC -ltag kwt_upd_meta.cpp
c: clean
clean:
rm -rf *.o
rm -rf *.db
ca: cleanall
cleanall: clean
rm -rf $(EXE)
ob: cleanall
rm -rf ~/.config/$(EXE)/
исполнение:
$ ./kwest mnt
./kwest: error while loading shared libraries: libkw_taglib.so: cannot open shared object file: No such file or directory
$ export LD_LIBRARY_PATH=../lib:D_LIBRARY_PATH
$ ./kwest mnt
"executes correctly"
2 ответов
обычный способ-скопировать динамическую библиотеку во время make по умолчанию и в один из стандартных путей библиотеки
/ usr / local / bin
или один из путей к библиотеке проекта и добавьте библиотеку в исполняемый файл с помощью
- L / project / specific / path
во время make install.
как уже упоминалось здесь, что вы, вероятно, хотите-это опция линкера -rpath
.
таким образом, вы можете установить путь поиска по умолчанию для двоичного файла. Похоже, вы даже уже используете -rpath
в вашем файле makefile, но вы указываете неправильный путь:
LIBS = -L$(LIB) -lfuse -lsqlite3 -lkw_taglib -ltag_c -ltag -Wl,-rpath=.
таким образом, двоичный файл будет искать в текущем каталоге Dyn-библиотеки.
Однако, вы добавляете ../lib
на LD_LIBRARY_PATH
позже, для выполнения двоичного файла, поэтому данный путь .
вроде бы неправильный.
пожалуйста, попробуйте следующее исправление:
LIBS = -L$(LIB) -lfuse -lsqlite3 -lkw_taglib -ltag_c -ltag -Wl,-rpath=../lib
например, вам не нужно указывать LD_LIBRARY_PATH для выполнения.