पर साझा लाइब्रेरी पथ जोड़ना मैं अपने मेकफ़ाइल में साझा लाइब्रेरी पथ जोड़ना चाहता हूं। मैंने मेकफ़ाइल में निर्यात कमांड में रखा है, इसे भी कॉल किया जाता है, लेकिन मुझे अभी भी इसे मैन्युअल रूप से निर्यात करना होगा। सही दृष्टिकोण क्या है?मेकफ़ाइल
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"
आपका आदेश एक खोल चलाता है जो चर को परिभाषित करता है, इसे निर्यात करता है (यानी इसे अपने बच्चों के लिए दृश्यमान बनाता है), फिर बाहर निकलता है। यह बाद के गोले या मेक की आंतरिक स्थिति को नियंत्रित नहीं कर सकता है। आप इसे मेकफ़ाइल चर के रूप में परिभाषित करना चाहते हैं; जीएनयू में, आप खोल में जैसे वैरिएबल 'निर्यात' कर सकते हैं। लेकिन @ प्रदीप का जवाब पहले से ही वर्णन करता है कि यह आमतौर पर इसके बजाय कैसे किया जाता है। – tripleee
संभावित डुप्लिकेट [संकलन के लिए मेकफ़ाइल के अंदर साझा लाइब्रेरी में पथ सेट करना] (http://stackoverflow.com/questions/32200799/setting-path-to-shared-library-inside-a-makefile-for-compile) – Alex