openssl - रास्पबेरी पिई 2 के लिए क्रॉस संकलन जंग-ओपनसएल



raspberry-pi rust (1)

मैं एक डेबियन मशीन पर हूं और मैं अपने रास्पबेरी पिई 2 के लिए एक परियोजना को संकुचित करना चाहता हूं। मैंने इसे एक सरल हैलो वर्ल्ड के लिए रस्टुप का उपयोग करने में कामयाब किया है, लेकिन यह समझ नहीं सका कि कैसे जंग- openssl टोकरा ।

मैंने openssl को arm-linux-gnueabihf-gcc के साथ संकलित किया है और इसे मेरे home/opensslArm निर्देशिका में स्थापित किया है।

जब मैं दौड़ता हूं

OPENSSL_LIB_DIR=/home/johann/opensslArm/lib OPENSSL_INCLUDE_DIR=/home/johann/opensslArm/include cargo build --target=armv7-unknown-linux-gnueabihf

मुझे यह त्रुटि मिलती है:

failed to run custom build command for `openssl-sys-extras v0.7.11`
Process didn't exit successfully: `/home/johann/projects/test/target/debug/build/openssl-sys-extras-e1c84960cd35bc93/build-script-build` (exit code: 101)
--- stdout
TARGET = Some("armv7-unknown-linux-gnueabihf")
OPT_LEVEL = Some("0")
PROFILE = Some("debug")
TARGET = Some("armv7-unknown-linux-gnueabihf")
debug=true opt-level=0
HOST = Some("x86_64-unknown-linux-gnu")
TARGET = Some("armv7-unknown-linux-gnueabihf")
TARGET = Some("armv7-unknown-linux-gnueabihf")
HOST = Some("x86_64-unknown-linux-gnu")
CC_armv7-unknown-linux-gnueabihf = None
CC_armv7_unknown_linux_gnueabihf = None
TARGET_CC = None
CC = None
HOST = Some("x86_64-unknown-linux-gnu")
TARGET = Some("armv7-unknown-linux-gnueabihf")
HOST = Some("x86_64-unknown-linux-gnu")
CFLAGS_armv7-unknown-linux-gnueabihf = None
CFLAGS_armv7_unknown_linux_gnueabihf = None
TARGET_CFLAGS = None
CFLAGS = None
running: "arm-linux-gnueabihf-gcc" "-O0" "-ffunction-sections" "-fdata-sections" "-g" "-fPIC" "-march=armv7-a" "-o" "/home/johann/projects/test/target/armv7-unknown-linux-gnueabihf/debug/build/openssl-sys-extras-e1c84960cd35bc93/out/src/openssl_shim.o" "-c" "src/openssl_shim.c"
ExitStatus(ExitStatus(256))


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



--- stderr
In file included from src/openssl_shim.c:1:0:
/usr/include/openssl/hmac.h:61:34: fatal error: openssl/opensslconf.h: No such file or directory
compilation terminated.
thread '<main>' panicked at 'explicit panic', /home/johann/.cargo/registry/src/github.com-88ac128001ac3a9a/gcc-0.3.28/src/lib.rs:840
note: Run with `RUST_BACKTRACE=1` for a backtrace.

अगर मैं सवाल में वेरिएबल्स निर्यात करता हूं तो मुझे वही त्रुटि मिलती है

मुझे नहीं पता कि मुझे क्या करना चाहिए, मैं क्रॉस कंपाइलिंग में विशेषज्ञ नहीं हूं। क्या ऐसा करने में कोई कामयाब है?

संपादित करें: मैं जंग का उपयोग कर रहा था 0.7.11 0.7.13 में अपग्रेड करने के लिए इस समस्या को तय किया गया (अब मैं एक त्रुटि के बिना कार्गो को संकुचित करने वाली जंग-खोलता है) पर निर्भर करता हूं, लेकिन अब एक और है:

error: linking with `arm-linux-gnueabihf-gcc` failed: exit code: 1
...

note: /usr/lib/gcc-cross/arm-linux-gnueabihf/5/../../../../arm-linux-gnueabihf/bin/ld: /home/johann/opensslArm/lib/libssl.a(s23_meth.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/home/johann/opensslArm/lib/libssl.a: error adding symbols: Bad value

मैं कैसे -fPIC झंडा जोड़ सकता हूँ? क्या मैं विशिष्ट झंडे के साथ opensslArm को पुनः कंपाइल कर सकता हूं?


-fPIC संकलन को विन्यस्त करते समय आपको shared विकल्प पास करना होगा (यह -fPIC पैरामीटर को कंपाइलर के पास दिया जाएगा)।

यहां उन आदेशों का एक अनुक्रम है जो मैंने एक जंग प्रोग्राम को संकलित करने के लिए उपयोग किया था जो कि openssl संस्करण को प्रिंट करता है:

cd /tmp

wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
tar xzf openssl-1.0.1t.tar.gz
export MACHINE=armv7
export ARCH=arm
export CC=arm-linux-gnueabihf-gcc
cd openssl-1.0.1t && ./config shared && make && cd -

export OPENSSL_LIB_DIR=/tmp/openssl-1.0.1t/
export OPENSSL_INCLUDE_DIR=/tmp/openssl-1.0.1t/include
cargo new xx --bin
cd xx
mkdir .cargo
cat > .cargo/config << EOF
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
EOF

cat > src/main.rs << EOF
extern crate openssl;

fn main() {
    println!("{}", openssl::version::version())
}
EOF

cargo add openssl # requires cargo install cargo-add
cargo build --target armv7-unknown-linux-gnueabihf

होस्ट कंप्यूटर पर संकलित कार्यक्रम का परीक्षण करना

OPENSSL_STATIC सेट OPENSSL_STATIC से rust-openssl OPENSSL_STATIC स्थिर रूप से लिंक किया जाता है। यदि आप rust rust-openssl के स्थैतिक लिंक किए गए संस्करण का उपयोग करते हैं, तो armhf ( डेबियन पर crossbuild-essential-armhf ) और crossbuild-essential-armhf स्टैटिक के लिए एक libc स्थापित करें, आप कमांड के साथ संकलित प्रोग्राम को चला सकते हैं:

qemu-arm-static target/armv7-unknown-linux-gnueabihf/debug/xx