2014-04-10 4 views
5

पर `SHA1 'के अनिर्धारित संदर्भ मैं लिनक्स पर लाइब्रेरी संकलित करने का प्रयास करता हूं। यह libary <openssl/sha.h> लाइब्रेरी का उपयोग करता है। मैंने इस पुस्तकालय को स्रोत फ़ाइल में शामिल किया है। उसके बाद, मैं इस परियोजना को संकलित करने के लिए ध्वज -lssl का ध्वज और -lcrypto ध्वज का उपयोग करता हूं। तो यहाँ मेरी आदेश है:लाइन

gcc -g -Wall -lssl -lcrypto -o bt_client file_a.c file_b.c

लेकिन मैं त्रुटि को पूरा: लाइन 130 पर

undefined reference to `SHA1' at line 130 

कोड है:

SHA1((unsigned char *) null_padded_name, 20, (unsigned char *)name_sha1); 

मैं कुछ याद है? कृप्या मुझे सही करें। धन्यवाद :)

उत्तर

3

जब आप अपने आवेदन को लिंक करते हैं, तो लिंकर आपको कमांड लाइन पर दिए गए क्रम में निर्भरता की तलाश करता है।

तो यदि आप उस लाइब्रेरी पर निर्भर स्रोत/ऑब्जेक्ट फ़ाइल से पहले एक लाइब्रेरी (जैसे -lssl) जोड़ते हैं, तो लिंकर को कोई निर्भरता नहीं मिलेगी और लाइब्रेरी को अनदेखा नहीं किया जाएगा।

इसका मतलब है कि आपको हमेशा कमांड लाइन पर पुस्तकालयों को रखना होगा।

+2

यह आपको कोड का उपयोग कर के बीच अपने आवरण कोड रखकर/रैप कॉल ओवरराइड करने के लिए अनुमति देने का दिलचस्प क्षमता है और वास्तविक पुस्तकालय कोड। –

+0

धन्यवाद :) मैं इसे समझता हूं: डी –

+1

सच नहीं है। मैं हमेशा अपने पुस्तकालयों को पहले और मेरी सी और .o फाइलें आखिरी बार रखता हूं। (कोई अच्छा कारण नहीं है, अगली बनाने के लिए पुरानी मेकफ़ाइल कॉपी करें।) मैं लिनक्स पर g ++ का उपयोग कर रहा हूं। नीचे दिए गए उत्तरों ने मेरी मदद की। मैं कह रहा था "-एलएसएलएल"। मुझे "-lcrypto" जोड़ने की जरूरत है। –

6

इस प्रयास करें:

gcc -g -Wall -o bt_client file_a.c file_b.c -lssl -lcrypto 

आप यह सुनिश्चित करें कि प्रतीक SHA1libssl.so या libcrypto.so में मौजूद हैं।

4

आप कमांड लाइन के अंत में -lssl और -lcrypto प्रदान करने की आवश्यकता:

gcc -g -Wall -o bt_client file_a.c file_b.c -lssl -lcrypto