2011-08-11 13 views
8

में निर्देशित लाइब्रेरी फ़ाइलों को नहीं ढूंढ रहा है, मैं इस टूल को संकलित करने का प्रयास कर रहा हूं। नीचे अपने Makefile की शुरुआत है:मेकफ़ाइल

CC  = gcc 
CFLAGS = -Wall -O2 -D TRACES 
DFLAGS = -g -Wall -o0 
CPPFLAGS= $(INCLUDES:%=-I %) 
LDFLAGS = $(LIBRARIES:%=-L %) 
LDLIBS = $(USED_TOOLS:%=-l%) 

MY_FILES = 
INCLUDE_DIR  = ~/include 

TOOLBOX_INC  = $(INCLUDE_DIR)/tools 
TOOLBOX_LIB  = $(TOOLBOX_INC) 
USED_TOOLS  = std_io stringutils 
INCLUDES = $(TOOLBOX_INC) 
LIBRARIES = $(TOOLBOX_LIB) 

मैं भी है ~/शामिल जिसके बाद संकलन std_io.o, libstd_io.a, stringutils.o भी शामिल है और libstringutils.a

मैं हो रही है/उपकरण निम्नलिखित त्रुटि:

gcc -L ~/include/tools rank.o counterexample.o -lstd_io -lstringutils -o rank 
ld: library not found for -lstd_io 
collect2: ld returned 1 exit status 
make: *** [rank] Error 1 

मुझे यकीन नहीं है कि चीजें सही तरीके से शामिल नहीं हैं, और पुस्तकालय फ़ाइलों को क्यों नहीं ढूंढ रहा है।

संपादित करें: पता चला है कि मैंने गलती से -एल और -आई विकल्पों के बीच एक जगह छोड़ी है। इसके अलावा, मुझे लगता है कि रास्ते का विस्तार किया जाना था। यह अब काम कर रहा है, धन्यवाद!

+1

क्या आप सुनिश्चित हैं कि आपका '~' आपकी होम निर्देशिका में विस्तार हो रहा है? 'INCLUDE_DIR' के लिए पूर्ण पथ का उपयोग करने का प्रयास करें। –

+0

क्या यह कमांड लाइन से काम करता है? – Beta

+0

क्या आपके पास 'libstd_io.a' पर सही अनुमतियां हैं? –

उत्तर

12

समस्या "होम निर्देशिका" के लिए टिल्डे का उपयोग है। एक खोल केवल तिल का विस्तार करेगा यदि टिल्ड एक शब्द में पहला गैर-वर्णित चरित्र है। मेकफ़ाइल कभी भी टिल्डे विस्तार नहीं करते हैं। इस प्रकार,

gcc -L~/include ... 

खोल में टिल्ड विस्तार और जीसीसी प्रदर्शन नहीं करता नामक एक निर्देशिका के लिए दिखेगा मौजूदा निर्देशिका में "~/शामिल हैं"। लेकिन

gcc -L ~/include ... 

में खोल टिल्ड विस्तार करते हैं और जीसीसी जो अपेक्षा के अनुरूप काम करता है

gcc -L /usr/username/include ... 

देखता बजाय, करता है। करने के लिए सही बात यह है कि घर निर्देशिका के लिए कभी भी टिल्डे विस्तार का उपयोग न करें, लेकिन मेकफ़ाइल में उचित रूप से $ HOME का उपयोग करें, उदा।

INCLUDE_DIR  = $$HOME/include 
+1

इस उत्तर के लिए धन्यवाद। कुछ लोगों ने मेरे लिए टिल्ड विस्तार के बारे में कुछ पता लगाना मुश्किल था। – szydan