दिलचस्प पोस्ट
Mysql के लिए अधिकतम क्वेरी आकार क्या है? मैक बंडल में फ़ॉन्ट एम्बेड करें यह निर्धारित करने के लिए कि क्या स्ट्रिंग में गैर-अल्फ़ान्यूमेरिक वर्ण हैं? त्रुटि को कैसे हल करने के लिए 'उत्पादन' पर्यावरण के लिए 'secret_key_base` लापता है (रेल 4.1) BasicHttpBinding बनाम WsHttpBinding बनाम WebHttpBinding इस मामले में निर्माता की कॉपी क्यों नहीं की जाती है? ऑटोलेआउट + आरटीएल + यूआईएलएबल पाठ संरेखण अक्षांश / अक्षांश निर्देशांक मिलान करने के लिए नियमित अभिव्यक्ति? अपरिभाषित व्यवहार और अनुक्रम अंक एक EXE फ़ाइल लोड करें और इसे स्मृति से चलाएं प्रिंट करने के तरीके (cout का उपयोग करके) किस प्रकार एक संख्या को स्मृति में संग्रहीत किया जाता है? साझा प्राथमिकताओं में एक हैश मैप को सहेजना PL / pgSQL में '$$' के लिए क्या उपयोग किया जाता है त्रुटियों को मैन्युअल रूप से लॉग करने के लिए ELMAH का उपयोग कैसे करें डाटाबेस में संग्रहित पासवर्ड की पसंदीदा विधि

एक प्रोग्राम में 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 का उपयोग करें ।