2016-07-31 2 views
0

라즈베리 파이에 C를 사용하여 간단한 암호화 프로그램을 작성합니다. 성공적으로 내 X86 CPU에 대해 gcc encoder.c -lcrypto -o encoder (libssl-dev를 설치했습니다.)으로 컴파일했지만, cross-arm-linux-gnueabihf-gcc로 컴파일하려고 할 때이 오류가 발생했습니다. 발생 :오픈 SSL C 컴파일을 사용하는 중 오류가 발생했습니다.

$ arm-linux-gnueabihf-gcc encoder.c -lcrypto -o encoder 
    In file included from ./encoder.c:4:0: 
    /usr/include/openssl/aes.h:55:33: fatal error: openssl/opensslconf.h: No such file or directory 
    #include <openssl/opensslconf.h> 
            ^
    compilation terminated. 

Raspberry Pi 용 openssl C 응용 프로그램을 상호 컴파일하는 방법은 무엇입니까?

+0

가장 쉬운 방법은 SSH를 사용하여 RPI를 작성하고 직접 장치를 구성하는 것입니다. 기본 자격 증명은 username ***'pi' ***과 password ***'raspberry' ***입니다. 그렇지 않으면, 크로스 컴파일을위한 쉘 환경을 설정해야합니다. 도구 체인과 헤더를 경로에 넣어야하고 'CROSS_COMPILE'과 같은 변수를 설정해야합니다. [스크립트 구성] (http://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/Configure)에서 주석을 확인하십시오. – jww

+0

감사합니다. 제안한대로 armhf 패키지를 x86 시스템에 직접 설치할 수 없습니다. 유사한 문제 및 칭의입니다. http://superuser.com/questions/1080869/how-do-i-download-a-debian-arm-package-from-another-computer – SAP

+0

장치에 대한 직접 액세스가 필요합니다. 네이티브 빌드 또는 크로스 컴파일해야합니다. 장치에 SSH를 넣을 수없고 해당 툴체인으로 크로스 컴파일 할 수없는 경우 장치 용 프로그램을 빌드 할 수 없습니다. – jww

답변

0

가장 큰 문제는 크로스 컴파일러가 (x86 컴퓨터에서와 마찬가지로) 빌드를 사용하려고 시도하는 것이며 링크가 올 경우 (물론 링크가되지 않는 경우) 잘못된 라이브러리를 사용하게되어 행복합니다.). 오랫동안 정확하게이 문제를 해결하는 --sysroot option이 있습니다. 대상 머신에 대한 sysroot를 올바르게 설정해야합니다. 이미 교차 - 컴파일러가있는 경우 이미 일부 sysroot가 있습니다. (크로스 컴파일러가 설치된 위치와 방법에 따라) 적절한 경로를 알아야하고, openssl 자체를 컴파일하고 설치해야합니다. (openssl을 재미 있지 않게 컴파일해야합니다.) 그러면 다음을 사용하여 크로스 컴파일 할 수 있습니다. 당신 Pi를위한 openssl.

주석에서 이미 언급했듯이 장치를 빌드하는 것이 훨씬 쉽지만 Pi는 느리므로 Pi 설치 또는 느린 빌드 또는 상대적으로 어려운 교차 컴파일 설정과 x86의 빠른 빌드 중에서 선택할 수 있습니다 기계.

대안으로 OpenEmbedded, BuildRoot 또는 OpenWRT와 같은 특수한 크로스 컴파일 환경을 만들려고 시도 할 수 있습니다.하지만 이는 간단한 프로그램 하나에 대한 과장입니다.

+0

당신은 절대적으로 사랑하는 로마 키 모프입니다. 필자는 필요한 파일을 -L & -I와 함께 PC로 전송하여이 문제를 해결했습니다. 당신은 더 나은 해결책을 제안합니다. 그러나, 나는 정말로 혼란스러워했다. "libc6-dev-armel-cross"패키지로 인해 - sysroot 옵션을 사용하여 간단한 c-code를 컴파일 할 수 있습니다. 이 시나리오에서 크로스 패키지를 사용할 수없는 이유는 무엇입니까? – SAP

+0

@SAP : 아마도 데비안 교차 도구 체인에 대해 모르는 무언가가있을 것입니다. 보십시오 (이 질문에) (http://stackoverflow.com/questions/17603213/cross-compilation-gcc-ignores-sysroot), 어쩌면 당신의 특정 상황에 가깝습니다. –