2011-10-19 6 views
14

मैं ओपनएसएसएल को -Wa, - noexecstack के साथ बनाने की कोशिश कर रहा हूं, लेकिन इस ध्वज को प्रदान करने के लिए इसकी कॉन्फ़िगर कमांड लाइन में कहीं भी नहीं मिला। मैंने CFLAGS सेट करने का प्रयास किया है, लेकिन ऐसा लगता है कि यह अनदेखा करता है और बस इसका उपयोग करता है।ओपनएसएसएल के लिए कोई कस्टम कंपाइलर/लिंकर झंडे कैसे प्रदान कर सकता है?

यह एक स्वचालित OpenSSL स्रोत का एक स्वच्छ प्रतिलिपि, तो config स्क्रिप्ट की एक बार की हैक बंद काम कर निर्माण वास्तव में एक विकल्प नहीं है है।

क्या ओपनएसएसएल की निर्माण प्रक्रिया में कस्टम झंडे पास करने का कोई तरीका है?

+0

नोट प्रलेखन वास्तव में पता चलता है कि है कि आप उन संपादन कर आप से बचना चाहते हैं - https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings, जहां वे भाग के रूप में sed चलाने के बारे में बात को देखने के आपके निर्माण का। –

उत्तर

12

config स्क्रिप्ट CFLAGS को अनदेखा करता है, लेकिन CC नहीं है। तो आप अपने संकलक निर्दिष्ट करें और यह एक ही समय में झंडे दे सकते हैं: के बाद से config ऑटो अपने मंच का पता लगाता है और फिर पूर्व निर्धारित संकलक सेटिंग्स के साथ Configure चलाता है,

export CC="gcc -Wall -DHELLO_WORLD"; ./config 
वैकल्पिक रूप से

, आप अपने मंच विन्यास को संकलक झंडे जोड़ सकते हैं । जैसे, के लिए अपने मैक, मैं इस लाइन देखने के लिए जब मैं पहली बार config चलाएँ:

Operating system: i386-apple-darwinDarwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 
Configuring for darwin-i386-cc 

तो अगर मैं Configure खोलते हैं, तो मैं darwin-i386-cc के लिए खोज और प्रीसेट को झंडे जोड़ सकते हैं।

यदि आप प्रीसेट कॉन्फ़िगरेशन का उपयोग नहीं कर रहे हैं, तो आप कमांड लाइन पर सीधे झंडे Configure पर पास करेंगे और यह उनका उपयोग करेगा।

3

पार्टी है, लेकिन ऐसा करने का एक और तरीका है करने के लिए देर से उत्पन्न makefile के लिए एक स्वचालित संपादित करना है। जैसे, झंडे को -DPURIFY जोड़ने के लिए, मैं पहले, नियमित रूप से कॉन्फ़िगर करना तो:

perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile 

नहीं सबसे सुरुचिपूर्ण समाधान है, लेकिन यह मेरे लिए काम करता है।

+0

यह ध्वज को हटाने या बदलने का एकमात्र तरीका प्रतीत होता है। –

20

बाद में पार्टी में, लेकिन ऐसा करने का यह सही तरीका प्रतीत होता है।

config स्क्रिप्ट मदद से

:

$ ./config -h 
Usage: config [options] 
-d Add a debug- prefix to machine choice. 
-t Test mode, do not run the Configure perl script. 
-h This help. 

Any other text will be passed to the Configure perl script. 
See INSTALL for instructions. 

तो config स्क्रिप्ट अग्रेषित करता Configure स्क्रिप्ट को "अप्रत्याशित" विकल्प। ठीक है, की सुविधा देता है देखो क्या Configure स्क्रिप्ट के बारे में क्या कहना है:

$ ./Configure --help 
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags] 

कि लंबी लाइन के अंत में [:flags] हिस्सा देखते हैं?

# -<xxx> +<xxx> compiler options are passed through 

ऐसा नहीं है कि स्पष्ट है, क्योंकि यह अच्छी तरह से ज्ञात मानकों का पालन नहीं करता है नहीं है, लेकिन जवाब है:: सिर्फ config कमांड लाइन के अंत करने के लिए विकल्पों संलग्न वहाँ भी फाइल के अंदर एक टिप्पणी है।

जब से तुम प्रश्न पोस्ट के रूप में एक लंबे समय बीत चुका है, मैं जोड़ना होगा:

  • यह OpenSSL के संस्करण आप के साथ काम कर रहे हैं के लिए काम नहीं कर सकते हैं (मेरा OpenSSL 1 है।0);
  • मुझे इस जवाब को पोस्ट करने के लिए मजबूर होना पड़ा क्योंकि पिछले किसी भी उत्तर में मेरी समस्या हल नहीं हुई थी और मुझे उस समाधान को समझने में थोड़ा समय लगा।
+1

बाहर निकलता है यह उपयोगी नहीं है। अधिकांश समय आपको _set_ cflags की आवश्यकता होगी; यह सिर्फ उन्हें जोड़ता है। पहले से मौजूद बुरे लोगों से छुटकारा पाने में मदद नहीं करता है। –