दिलचस्प पोस्ट
सुंदर git शाखा ग्राफ मैं $ $ .getJSON फ़ंक्शन से एक वैरिएबल कैसे वापस कर सकता हूं वीएस 2015 में स्ट्रिंग प्रक्षेपण के लिए अंतिम प्रारूप क्या है? एंड्रॉइड में यूआई थ्रेड पर चलने की जांच कैसे करें? Intent.ACTION_GET_CONTENT से फाइल में यूआरआई Sys.stdout.flush () विधि का उपयोग दो खींचने योग्य डिवाओं के बीच एक रेखा खींचें ट्विटर बूटस्ट्रैप अनुकूलन सर्वश्रेष्ठ व्यवहार अभिव्यक्ति में लाइन ब्रेक ()? क्रोम खींचने के दौरान पाठ को कर्सर सेट करते हैं, क्यों? System.out.println (ऑब्जेक्ट) का आउटपुट इसे संपादन योग्य बनाने के बिना यूआईटीextफ़िल्ड पर कॉपी और पेस्ट सक्षम करें आप एक अंतरफलक के सभी कार्यान्वयन कैसे प्राप्त करते हैं? WPF: मैं एक विंडो में सभी नियंत्रणों के माध्यम से कैसे लूप कर सकता हूँ? जीसीसी -4 4.2 निकास कोड 1 आईफ़ाइल के साथ असफल रहा I

एक प्रोग्राम में 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 गलत तरीके से संकलित कर रहा हूं? या मुझे यह सबसे अच्छा कैसे हल करना चाहिए?

Solutions Collecting From Web of "एक प्रोग्राम में 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 का उपयोग करें ।