2016-01-05 38 views
11

tôi đã cố gắng để cài đặt các khung sắt cho Rust trên Mac OS X 10.11.2, nhưng nó đã thất bại khi tôi chạy cargo build hay cargo run về soạn thảo openssl 's thứ:OpenSSL thùng không biên soạn trên Mac OS X 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 phiên bản có vẻ OK:

$ openssl version 
OpenSSL 0.9.8zg 14 July 2015 

tôi không biết những gì tôi phải làm để làm cho công việc cài đặt này và cung cấp cho sắt một thử.

Trả lời

15

Do phiên bản rust-openssl 0.8, thư viện OpenSSL được cài đặt Homebrew sẽ được thùng tự động phát hiện, không cần phải đặt thêm biến môi trường.

Nếu bạn cần hỗ trợ phiên bản trước đó hoặc chọn không sử dụng Homebrew, hãy đọc tiếp.


Đây là một known issue (còn thisthis), nhưng không phải một mà những thùng có thể sửa chữa.

Các giải pháp nhanh chóng là cài đặt OpenSSL với Homebrew và sau đó một cách rõ ràng trỏ đến thư mục chứa OpenSSL được tìm thấy bằng cách thiết lập OPENSSL_INCLUDE_DIROPENSSL_LIB_DIR môi trường biến:

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

Nếu bạn đã thực hiện một cargo build, bạn sẽ cần phải chạy cargo clean trước tiên để xóa một số thông tin đã lưu trong bộ nhớ cache cũ của chúng tôi.

Nếu bạn không muốn đặt cài đặt này cho mọi vỏ bạn mở, hãy thêm nó vào tệp khởi tạo trình bao (như ~/.bash_profile). Bạn có thể làm cho nó một chút ít giòn bằng cách không cứng mã hóa số phiên bản:

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

Nếu bạn không muốn sử dụng Homebrew, hãy làm theo quá trình tương tự nhưng sử dụng con đường phù hợp với bản sao của OpenSSL.


Lý do còn là cũng described by andrewtj:

OpenSSL không có ABI ổn định như vậy vì mục đích tương thích của Apple đã duy trì một ngã ba đó là tương thích với một trong những Abis trước đó. Họ không dùng OpenSSL trong 10.7 và cuối cùng đã giảm các tiêu đề trong 10.11 để thúc đẩy các nhà phát triển ứng dụng OS X hướng tới việc đóng gói OpenSSL của riêng họ hoặc sử dụng các khung công tác của họ. Các dylibs đã được để lại xung quanh vì vậy các ứng dụng chưa được cập nhật không phá vỡ. Bạn vẫn có thể liên kết với chúng nhưng bạn đang mở cho mình các vấn đề tương thích lẻ bằng cách làm như vậy (trừ khi bạn lấy các tiêu đề từ bản phát hành OS X trước đó).

+1

Tôi khá chắc chắn rằng chạy 'brew liên kết --force openssl' cùng với cài đặt' pkg -config' sẽ giải quyết vấn đề này tự động. Điều đó nói rằng, nó có thể không phải là một ý tưởng tốt để làm cho các thư viện openssl có sẵn theo mặc định, tôi không chắc chắn. –

+0

@VladimirMatveev vâng, đó là đề cập đến trong một số vấn đề, nhưng tôi cũng thận trọng với một cái gì đó như '- force' cho đến khi tôi hiểu nó kỹ lưỡng. Tôi hy vọng rằng các nhà phát triển Homebrew làm tất cả công việc khó khăn và đưa ra một đề xuất vững chắc mà tôi có thể làm theo. :-) – Shepmaster

+2

Vâng, AFAIK trong trường hợp này '--force' chỉ ghi đè cài đặt trong công thức không tạo liên kết tượng trưng theo mặc định. Vì vậy, điều này không nên làm bất cứ điều gì nguy hiểm và thậm chí có thể được hoàn nguyên bởi 'brew unlink'. Nhưng có, tôi không biết về hậu quả của việc làm cho các thư viện openssl có sẵn trong '/ usr/local/lib'. –

1

Nếu bạn có openssl homebrew được cài đặt chỉ cần thêm dòng sau vào Cargo.toml của bạn:

[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" ] 

và sau đó cargo clean && cargo build. Không phá vỡ OS X bằng cách giới thiệu một openssl không tương thích vào các đường dẫn tải thư viện, và không quên đặt/bỏ đặt các biến môi trường khi bạn muốn xây dựng (hoặc gây ô nhiễm shell của bạn khi không làm việc trên các công cụ Rust). Tất cả trong một cách tiếp cận hạnh phúc hơn và ít tức giận hơn.

Tôi không thể thêm câu trả lời này vào my own question nơi nó thuộc về (vì nó phụ thuộc vào homebrew), vì Shepmaster quyết định nên đóng nhưng tôi sẽ trả lời ở đây và liên kết đến câu hỏi đó.

+0

Lưu ý rằng giải pháp này (có vẻ hợp lý) dường như không phụ thuộc vào homebrew; bất kể bạn đã cài đặt openssl như thế nào hoặc ở đâu, bạn sẽ có thể thêm các biến cấu hình đó. Nhược điểm lớn nhất là bạn đang buộc mã của bạn chỉ chạy trên máy của bạn (hoặc các máy có bố trí tương tự). Không phải tất cả các mục tiêu 'x86_64-apple-darwin' sẽ có cùng đường dẫn cài đặt. – Shepmaster

+0

True, nó không phải là một phụ thuộc homebrew cứng, nhưng bạn cần phải có cài đặt openssl mình như của El Cap, bởi vì các tiêu đề đã biến mất cho openssl hệ thống (cộng với nó chỉ là quá cũ để được sử dụng nhiều). –

+0

Yep; dường như phù hợp với báo giá ở cuối câu trả lời khác. Những thứ như Fink hay MacPorts vẫn là một thứ? Tôi đoán mọi người luôn có thể biên soạn phiên bản OpenSSL của riêng họ ... – Shepmaster

4

Với Brew sử dụng như thế này:

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

điều này làm việc cho tôi kể từ tháng 4 năm 2017 trên El Capitan OSX. Cảm ơn – jamescampbell

Các vấn đề liên quan