2016-01-05 8 views
11

मैं पर मैक ओएस एक्स 10.11.2 जंग के लिए आयरन ढांचा स्थापित करने की कोशिश की पर संकलन में विफल रहता है, लेकिन यह विफल रहा है जब मैं openssl के सामान संकलन पर cargo build या cargo run चलाएँ:OpenSSL टोकरा मैक ओएस एक्स 10.11

failed to run custom build command for `openssl-sys-extras v0.7.4` 
Process didn't exit successfully: `/xxx/rust/hello/target/debug/build/openssl-sys-extras-413d6c73b37a590d/build-script-build` (exit code: 101) 
--- stdout 
TARGET = Some("x86_64-apple-darwin") 
OPT_LEVEL = Some("0") 
PROFILE = Some("debug") 
TARGET = Some("x86_64-apple-darwin") 
debug=true opt-level=0 
HOST = Some("x86_64-apple-darwin") 
TARGET = Some("x86_64-apple-darwin") 
TARGET = Some("x86_64-apple-darwin") 
HOST = Some("x86_64-apple-darwin") 
CC_x86_64-apple-darwin = None 
CC_x86_64_apple_darwin = None 
HOST_CC = None 
CC = None 
HOST = Some("x86_64-apple-darwin") 
TARGET = Some("x86_64-apple-darwin") 
HOST = Some("x86_64-apple-darwin") 
CFLAGS_x86_64-apple-darwin = None 
CFLAGS_x86_64_apple_darwin = None 
HOST_CFLAGS = None 
CFLAGS = None 
running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-g" "-m64" "-fPIC" "-o" "/xxx/rust/hello/target/debug/build/openssl-sys-extras-413d6c73b37a590d/out/src/openssl_shim.o" "-c" "src/openssl_shim.c" 
ExitStatus(Code(1)) 


command did not execute successfully, got: exit code: 1 



--- stderr 
src/openssl_shim.c:1:10: fatal error: 'openssl/hmac.h' file not found 
#include <openssl/hmac.h> 
    ^
1 error generated. 
thread '<main>' panicked at 'explicit panic', /xxx/.cargo/registry/src/github.com-0a35038f75765ae4/gcc-0.3.21/src/lib.rs:772 

openssl संस्करण ठीक लगता है:

$ openssl version 
OpenSSL 0.9.8zg 14 July 2015 

मुझे लगता है मैं इस स्थापना के काम करने और आयरन एक कोशिश देने के लिए क्या करना है पता नहीं है।

उत्तर

15

जंग-ओपनएसएल संस्करण 0.8 के रूप में, होमब्रू-स्थापित ओपनएसएसएल पुस्तकालयों को स्वचालित रूप से क्रेट द्वारा पता लगाया जाएगा, अतिरिक्त पर्यावरण चर सेट करने की आवश्यकता नहीं है।

यदि आपको इससे पहले किसी संस्करण का समर्थन करना है या होमब्रू का उपयोग नहीं करना है, तो पढ़ें।


यह एक known issue (भी this और this), लेकिन एक है कि टोकरा ठीक कर सकते हैं है। आप पहले से ही एक cargo build किया है

OPENSSL_INCLUDE_DIR=/usr/local/Cellar/openssl/1.0.2e/include \ 
OPENSSL_LIB_DIR=/usr/local/Cellar/openssl/1.0.2e/lib \ 
cargo build 

आप:

त्वरित समाधान Homebrew साथ OpenSSL स्थापित करने के लिए और फिर स्पष्ट रूप से निर्देशिका जहां OpenSSL OPENSSL_INCLUDE_DIR और OPENSSL_LIB_DIR वातावरण चर सेट करके पाया जाता है को इंगित है हमारी कुछ पुरानी कैश की गई जानकारी को साफ़ करने के लिए पहले cargo clean चलाने की आवश्यकता होगी।

यदि आप इसे खोलने वाले प्रत्येक खोल के लिए सेट नहीं करना चाहते हैं, तो इसे अपने खोल प्रारंभिक फ़ाइलों (जैसे ~/.bash_profile) में जोड़ें। आप इसे थोड़ा कम नहीं हार्ड-कोड संस्करण संख्या से भंगुर बना सकते हैं:

export OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)/include 
export OPENSSL_LIB_DIR=$(brew --prefix openssl)/lib 

आप Homebrew का उपयोग नहीं करना चाहते हैं, उसी प्रक्रिया का पालन लेकिन OpenSSL के अपने प्रतिलिपि करने के लिए उपयुक्त पथ का उपयोग।


अब कारण अच्छी तरह से described by andrewtj है: तो संगतता उद्देश्यों एप्पल के लिए एक कांटा पहले कपड़े में से एक के साथ संगत है बनाए रखा है

OpenSSL एक स्थिर ABI जरूरत नहीं है। उन्होंने 10.7 में ओपनएसएसएल को हटा दिया और आखिरकार ओएस एक्स ऐप डेवलपर्स को अपने ओपनएसएसएल को बंडल करने या उनके ढांचे का उपयोग करने के लिए हेडर्स को 10.11 में गिरा दिया। डाइलीब को ऐसे ऐप्स के आस-पास छोड़ दिया गया है जिन्हें अद्यतन नहीं किया गया है, तोड़ना नहीं है। आप अभी भी उनके खिलाफ लिंक कर सकते हैं लेकिन आप ऐसा करके अजीब संगतता मुद्दों को खोल रहे हैं (जब तक आप पहले ओएस एक्स रिलीज से हेडर नहीं लेते)।

+1

मैं एक साथ भी इंस्टॉल किया 'pkg के साथ सुंदर है कि चल रहा है' काढ़ा लिंक --force openssl' यकीन -config' स्वचालित रूप से इस समस्या को हल करेगा। उस ने कहा, डिफ़ॉल्ट रूप से openssl पुस्तकालय उपलब्ध कराने के लिए एक अच्छा विचार नहीं हो सकता है, मुझे यकीन नहीं है। –

+0

@VladimirMatveev हाँ, कुछ मुद्दों में इसका उल्लेख है, लेकिन मैं वैसे ही सावधानी बरतता हूं जब तक कि मैं इसे पूरी तरह समझ नहीं पाता हूं। मुझे उम्मीद है कि होमब्री देव सभी कड़ी मेहनत करते हैं और एक ठोस सिफारिश करते हैं जिसे मैं बस पालन कर सकता हूं। :-) – Shepmaster

+2

ठीक है, इस मामले में AFAIK '--force' केवल सूत्र में सेटिंग को ओवरराइड करता है न कि डिफ़ॉल्ट रूप से सिम्लिंक बनाने के लिए। तो यह कुछ भी खतरनाक नहीं करना चाहिए और 'ब्रू अनलिंक' द्वारा भी वापस किया जा सकता है। लेकिन हां, मुझे '/ usr/local/lib' में उपलब्ध openssl लाइब्रेरी बनाने के परिणामों के बारे में पता नहीं है। –

1

आप homebrew के openssl स्थापित है, तो बस अपने Cargo.toml को निम्नलिखित जोड़ें:

[target.x86_64-apple-darwin.openssl-sys] 
rustc-link-search = [ "/usr/local/opt/openssl/lib" ] 
rustc-link-lib = [ "ssl", "crypto" ] 
include = [ "/usr/local/opt/openssl/include" ] 

और फिर cargo clean && cargo build। लाइब्रेरी लोड पथ में एक असंगत openssl को पेश करके कोई ब्रेकिंग ओएस एक्स नहीं, और जब आप बनाना चाहते हैं तो पर्यावरण चर सेट/सेट करना भूल नहीं सकते (या जंग के सामान पर काम नहीं करते समय अपने खोल env को प्रदूषित करना)। सब कुछ एक बहुत ही खुश और कम क्रूर दृष्टिकोण में।

मैं यह उत्तर my own question पर नहीं जोड़ सकता जहां यह संबंधित है (क्योंकि यह होमब्रू पर निर्भर करता है), क्योंकि Shepmaster ने फैसला किया कि इसे बंद किया जाना चाहिए, लेकिन मैं यहां जवाब दूंगा और उस प्रश्न से लिंक करूंगा। MacPorts के लिए

brew install openssl 
export OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include 
export OPENSSL_LIB_DIR=`brew --prefix openssl`/lib 
cargo clean 
cargo build 
+0

ध्यान दें कि यह समाधान (जो उचित लगता है) होमब्री पर निर्भर नहीं लगता है; इस पर ध्यान दिए बिना कि आपने openssl कैसे स्थापित किया है या नहीं, आप उन कॉन्फ़िगरेशन चर जोड़ने में सक्षम होना चाहिए। बड़ा नकारात्मक यह है कि आप केवल अपनी मशीन (या समान लेआउट वाली मशीनों) पर चलाने के लिए अपना कोड डाल रहे हैं। सभी 'x86_64-apple-darwin' लक्ष्यों में समान स्थापना पथ नहीं होंगे। – Shepmaster

+0

सच है, यह एक कठिन होमब्री निर्भरता नहीं है, लेकिन आपको एल कैप के रूप में खुद को openssl स्थापित करने की आवश्यकता है, क्योंकि हेडर सिस्टम openssl के लिए चले गए हैं (साथ ही यह बहुत अधिक उपयोग होने के लिए बहुत पुराना है)। –

+0

हाँ; ऐसा लगता है कि दूसरे उत्तर के नीचे उद्धरण के साथ फिट होना प्रतीत होता है। क्या फिंक या मैकपॉर्ट्स जैसी चीजें अभी भी एक चीज हैं? मुझे लगता है कि लोग हमेशा अपना ओपनएसएसएल संस्करण संकलित कर सकते थे ... – Shepmaster

4

इस तरह Brew उपयोग के साथ

sudo port install openssl 
export OPENSSL_INCLUDE_DIR=/opt/local/include 
export OPENSSL_LIB_DIR=/opt/local/lib 
cargo clean 
cargo build 
+0

यह एल कैपिटन ओएसएक्स पर अप्रैल 2017 के रूप में मेरे लिए काम किया। धन्यवाद – jamescampbell