2013-02-21 4 views
8

मैं जीएनयू का उपयोग कर रहा हूं एक सी/सी ++ परियोजना बनाने के लिए बनाएं जो कई लोग उपयोग करेंगे। मेकफ़ाइल सामान्य होने का प्रयास करता है क्योंकि इस प्रोजेक्ट में कई वैकल्पिक फ़ाइलें हैं और प्रत्येक उपयोगकर्ता उन फ़ाइलों को MATLAB इंटरफ़ेस के माध्यम से चुनता है जिन्हें बाद में कमांड लाइन तर्कों के माध्यम से मेकफ़ाइल प्रदान किया जाता है (लक्ष्य OPTS = 'XYZ' आदि ...)।जीएनयू जीसीसी कॉल के बाद "निरस्त जाल: 6" बनाएं हालांकि अकेले निष्पादित होने पर कॉल मान्य है

जब मैं मेकफ़ाइल का उपयोग करता हूं तो यह सही ऑब्जेक्ट निर्भरताओं को सही ढंग से पहचानता है, फिर उन वस्तुओं के लिए स्रोत पूर्वापेक्षाएँ ढूंढने और उन्हें बनाने के लिए आगे बढ़ता है। हालांकि, हर बार जब यह किसी ऑब्जेक्ट नियम को निष्पादित करने का प्रयास करता है तो मुझे जीसीसी कॉल के ठीक बाद "एपॉर्ट ट्रैप: 6" कहने में त्रुटि मिलती है।

gcc -g -D(the defines) -I(all the includes) -c -o obj1/xyz.o ../common/xyz.c 
make: *** [obj1/xyz.o] Abort trap: 6 

लेकिन अगर मुझे लगता है कि सटीक एक ही जीसीसी फोन लेने और (कमांड लाइन पर इसे चलाने के बस:

Makefile के रूप में

vpath %.c $(PATH) $(OBJ_DIR) 
# Pick compilers 
CC1=g++ 
CC2=gcc 
LNK=g++ 
# Assign variables for c/cpp implicit rules 
CXXFLAGS= $(CCFLAGS) $(DEFINES) $(INCLUDES) 
CFLAGS = $(CCFLAGS) $(DEFINES) $(INCLUDES) 

# Assign various user-defined values 
OUTPUT = -o $(USER_LIB) 
C_OBJECTS = $(patsubst %.c,$(OBJ_DIR)/%.o,$(C_SOURCES)) 
CPP_OBJECTS = $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(CPP_SOURCES)) 
OBJECTS = $(C_OBJECTS) $(CPP_OBJECTS) $(SIM_OBJECTS) 

# User Library Dependencies and Compilation Rules 
$(USER_LIB): $(OBJECTS) 
    $(LNK) $(LINKERFLAGS) $(CCFLAGS) $(DEFINES) $(INCLUDES) $(OUTPUT) $(OBJECTS) 

$(OBJ_DIR)/%.o: %.c 
    $(CC2) $(CFLAGS) -c -o [email protected] $< 

और मैं क्या मिल का एक उदाहरण है इस प्रकार है कॉपी और पेस्ट करें) फ़ाइल सही ढंग से संकलित है और ऑब्जेक्ट फ़ाइल obj1 फ़ोल्डर में रखी गई है।

मैंने यह देखने के लिए 'मेक-डी' देखने की कोशिश की कि मुझे कुछ भी मिल सकता है या नहीं। चूंकि यह आउटपुट पागल लंबा है, इसके बारे में निम्नलिखित है:

... output truncated for brevity ... 
gcc -g -D(the defines) -I(all the includes) -c -o obj1/xyz.o ../common/xyz.c 
Putting child 0x104f13cc0 (obj1/xyz.o) PID 24557 on the chain. 
Live child 0x104f13cc0 (obj1/xyz.o) PID 24557 
Reaping losing child 0x104f13cc0 PID 24557 
make: *** [obj1/xyz.o] Abort trap: 6 
Removing child 0x104f13cc0 PID 24557 from chain. 

आउटपुट समाप्त होने पर बिंदु। मैंने पहली त्रुटि के बाद क्या होता है यह देखने के लिए मेक-रन चलाने का भी प्रयास किया। प्रत्येक एकल स्रोत फ़ाइल एक ही परिणाम उत्पन्न करती है। दोबारा, प्रत्येक स्रोत फ़ाइल सटीक कॉल के साथ संकलित है जो स्वतंत्र रूप से किए जाने पर उपयोग करती है।

मैं इस बिंदु पर पूरी तरह से इस पर खो गया हूं और इस संदर्भ में "निरपेक्ष जाल: 6" का अर्थ क्या है, इस बारे में बहुत कम जानकारी है।

मैं मैक ओएसएक्स 10.7 चला रहा हूं जिसमें एक्सकोड के माध्यम से जीसीसी-4.2 स्थापित है।

मुझे एहसास है कि वर्तमान में .cpp फ़ाइलों के लिए कोई नियम नहीं है, मेरे पास वर्तमान में संकलित करने के लिए कोई भी .cpp स्रोत फ़ाइलें नहीं हैं, हालांकि भविष्य में शायद यही कारण है कि इसके लिए समर्थन संरचना है दूर।

किसी भी व्यक्ति के लिए अग्रिम धन्यवाद जो मेरी मदद कर सकता है।

संपादित करें: "मेक-डी" आउटपुट से एक कार्यवाही लाइन जोड़ा गया। संपादित करें: जोड़ा गया समाधान (उत्तर में स्थानांतरित)

+0

फोन मुझे लगता है कि जैसे एक त्रुटि में पहले कभी नहीं आई है। क्या हम निश्चित रूप से जानते हैं कि त्रुटि 'मेक' से आ रही है? यही है, क्या हम निश्चित हैं कि 'मेक' वास्तव में जीसीसी द्वारा उत्पन्न किए गए त्रुटि के साथ गुजर रहा है या सबहेल द्वारा? –

+0

हाय! मैं इसकी जांच कैसे करूं? मुझे पता है कि जब मैं कमांड लाइन से कॉल करता हूं तो जीसीसी अपने आप में कोई त्रुटि नहीं पैदा करता है। मुझे नहीं पता कि यह जांचने के लिए कि क्या इसे सबशेल से रखा गया है या नहीं। –

+0

I Googled 'ओएस एक्स "gnu" "निरस्त जाल बनाते हैं: 6" ', और एक्सकोड, ओएस उन्नयन इत्यादि से संबंधित कई चीजें मिलीं। क्या आपको' क्लीन बनाने 'से शुरू होने पर भी वही त्रुटि मिलती है? (मान लें कि आपके पास "साफ" नामक एक नकली लक्ष्य है।) –

उत्तर

5

सहायता के साथ, मेरे अपने प्रश्न का उत्तर दिया। सॉल्व: सबसे पहले "पागल वैज्ञानिक: 6" क्या है के लिए मैड वैज्ञानिक की टिप्पणी देखें।

यह देखते हुए कि सुराग मुझे एहसास हुआ कि मैं एक वेरिएबल का उपयोग करता हूं जिसे सिस्टम वैरिएबल, $ (पाथ) के साथ भ्रमित किया जा सकता है। ऐसा प्रतीत होता है सुनिश्चित निम्न पंक्ति मैं इसे कैसे उम्मीद की व्याख्या नहीं कर रहा था:

vpath %.c $(PATH) $(OBJ_DIR)      <------ Bad 

ऐसा लगता है कि प्रणाली चर $ (पथ) जो हो सकता है किया गया समस्याओं के कारण के साथ कुछ हस्तक्षेप मौजूद है। बस vpath वैरिएबल को $ (SRC_PATH) में बदलना सिस्टम वैरिएबल और किसी भी संभावित हस्तक्षेप के साथ संघर्ष को समाप्त करता है, इस प्रकार समस्या को ठीक करता है।

vpath %.c $(SRC_PATH) $(OBJ_DIR)     <------ Good 

सबक सीख लिया गया: परिवर्तनीय नामों से सावधान रहें और जानें कि आपके पर्यावरण चर क्या हैं।

"मैप वैज्ञानिक" को इंगित करने के लिए क्रेडिट करें कि "अपरिपक्व जाल: 6" का अर्थ पर्यावरण संबंधी मुद्दों का क्या अर्थ है।

0

यदि आपके कोड में कोई जोरदार विधि है तो आप उस त्रुटि को प्राप्त कर सकते हैं (जाल बंद करें: 6)।

उदाहरण के लिए

:

assert(numberOfItems >= 0); 

और अगर

numberOfItems < 0 

आप इस तरह एक त्रुटि प्राप्त होगी जब आप makefile

संबंधित मुद्दे