दिलचस्प पोस्ट
डेटा फ्रेम में सीमांकक पर विभाजित स्तंभ नामित पाइप्स का उदाहरण पायथन 2.7 से पहले डिक्की समझ के लिए वैकल्पिक सी # क्लाइंट से मल्टीपार्ट रूप एक दृश्य में कई मॉडल कोणीय जेएस में नियंत्रकों के बीच डेटा पासिंग? Java और .NET में स्ट्रिंग्स अचूक क्यों नहीं हो सकते? जी ++ सीपीपी में "अपरिभाषित संदर्भ" मैं jQuery के प्रयोग से वर्णानुक्रम में एक सूची कैसे सॉर्ट कर सकता हूँ? एक JSON सरणी में एक तत्व खोजने के लिए सूचकांक MySQL में पैसे के मूल्यों को स्टोर करने के लिए सर्वश्रेष्ठ डेटा प्रकार एक्लिप्स में शामिल बाहरी पुस्तकालयों के साथ एक जार कैसे बनाएं? पीडीओ को अंतिम आईडी डाला गया जावा में गहरी पुनरावर्ती से ढेर अतिप्रवाह? ऑपरेशन को अपडेट करने योग्य क्वेरी का उपयोग करना चाहिए। (त्रुटि 3073) माइक्रोसॉफ्ट एक्सेस

एक प्रोग्राम में OpenSSL पुस्तकालयों को लिंक करना

मैंने ओपनएसएसएल को स्रोत से (एक जानबूझकर पुराना संस्करण, ./config && make && make test ) के साथ निर्मित किया है) और मेरे प्रोग्राम के विरुद्ध लिंक को make install करने के बिना जो मैंने बनाया है उसका उपयोग करना पसंद करेंगे।

कमांड जो विफल हो रहा है:

 gcc -Wall -Wextra -Werror -static -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto -Iopenssl/openssl-0.9.8k/include -o myApp source1.o source2.o common.o` 

और मुझे इस प्रकार की त्रुटियों की श्रृंखला मिलती है:

 common.c:(.text+0x1ea): undefined reference to `SSL_write' 

इससे मुझे लगता है कि मेरे ओपनएसएसएल के साथ कुछ दिखलाना है अगर मैं अपने आदेश से -Lopenssl/openssl-0.9.8k/ को छोड़ -Lopenssl/openssl-0.9.8k/ हूं, तो त्रुटि में परिवर्तन नहीं हो पा रहा है:

 /usr/bin/ld: cannot find -lssl /usr/bin/ld: cannot find -lcrypto 

क्या मैं OpenSSL गलत तरीके से संकलित कर रहा हूं? या मुझे यह सबसे अच्छा कैसे हल करना चाहिए?

वेब के समाधान से एकत्रित समाधान "एक प्रोग्राम में OpenSSL पुस्तकालयों को लिंक करना"

बेवकूफ "लिनक्स- isms" फिर से हड़ताल! जाहिर है, मुझे अपने आदेश को बदलने की जरूरत है, जैसे- -L और -L सामान अंत में है (बावजूद man gcc क्या इंगित करता है):

gcc -Wall -Wextra -Werror -static -o myApp source1.o source2.o common.o -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto -Iopenssl/openssl-0.9.8k/include

आप make install लिए उपयोग क्यों नहीं करना चाहते हैं? यह आपके द्वारा इच्छित निर्देशिका में उत्पन्न बाइनरी कॉपी कर सकता है यदि आप पहले इसे पास कर चुके हैं ./configure --prefix $HOME/target_library_install_directory

यदि आप इस पुस्तकालय के साथ इस चाल का उपयोग करते हैं जो आप निर्माण और स्थापित करते हैं, तो आप LIBRARY_PATH परिवेश चर में लक्ष्य निर्देशिका को जोड़ सकते हैं और -एल विकल्प का उपयोग करने से बच सकते हैं।

यदि आप Autotools का उपयोग करते हैं, या आप cURL तरह एक Autools परियोजना का निर्माण कर रहे हैं, तो आप pkg-config का उपयोग करने में सक्षम होना चाहिए। यह विचार है कि Autotools पैकेज ओपनएसएसएल के पैकेज कॉन्फ़िगरेशन को पढ़ा जाएगा और चीजें आपके लिए "बस काम" करेगा

OpenSSL पैकेज कॉन्फ़िगरेशन लाइब्रेरी नाम openssl

आप इसे एक मेसेफाइल आधारित परियोजना में प्रयोग करेंगे।

 %.o: %.c $(CC) -o $@ -c `pkg-config --cflags openssl` $^ target: foo.o bar.o baz.o $(CC) -o $@ `pkg-config --libs openssl` $^ 

यह भी देखें कि कैसे पीकेजी-कॉन्फ़िग का उपयोग करें और कैसे एक पुस्तकालय को स्थायी रूप से लिंक करने के लिए pkg-config का उपयोग करें ।