2017-12-06 26 views
0

저는 C++ 프로그램을 armv5로 크로스 컴파일하려고합니다. armv5를 크로스 컴파일하면 다음과 같은 오류가 발생합니다. GLIBC_2.17을 찾을 수 없습니다 (libstdC++, libdbus, libsystemd 및 liblzma가 필요합니다) 내 대상 플랫폼에서 libc의 현재 버전이 15임을 알게되었습니다.다른 버전의 libc로 컴파일

1) 안전하게 업데이트 할 수있는 방법이 있습니까? 대상에 인터넷 연결이 없으며 텔넷 단위로만 연결할 수 있습니다. 문제는, 만약 업데이트가 실패하면, 장치에 새로운 OS를 플래시 할 수있는 액세스 권한이 없으며, 99 %가 고장났습니다 ^^.

2) (1)에 "아니요, 정말로"없다면 더 최신 버전의 libc15에 대해 컴파일 할 수 있습니까? 아니면 15로 다운 그레이드 할 수있는 방법이 있습니까? (컴파일을위한 VM 작성으로 인해 아무 것도 실패해도 상관하지 않음) 다른 libc 버전으로 컴파일하려면 무엇을 지정해야합니까?, 아직 올바른 플랫/매개 변수를 찾지 못했습니다 ...

감사합니다 모든 팁이나 아이디어, 지금 당분간이 문제가 생기고 나는 아직 어떤 솔루션을 찾기 위해 C++ 크로스 컴파일 링에 너무 익숙하지 않다. 여기 내 솔루션 같은 오류와 모든 사람을위한

+0

전체 크로스 컴파일 체인을 다운 그레이드하거나 시스템 전체에 설치하지 않고 새 libc를 플랫폼에 업로드하십시오. rpath 또는 LD_LIBRARY_PATH를 사용하여 런타임에 실행 파일을 새 버전과 연결하십시오. –

+0

도움이 될 수 있습니다. https://stackoverflow.com/questions/2856438/how-can-i-link-to-a-specific-glibc-version?rq=1 – BartekPL

+0

제목에 해결 방법을 추가하지 말고 동의하십시오. 귀하의 답변은 [둘러보기]를 참조하여 자세히 알아보십시오. –

답변

0

확인 감사합니다, : LD_LIBRARY_PATH/RPATH의 일이 ld-linux.so에서 경로가 하드 코딩되어 있음을 염두에두고 노력하고 있습니다. 따라서 LD_LIBRARY_PATH 또는 다른 종속성 오류로 지정된 폴더에 모든 라이브러리를 포함하는 것이 좋을 수도 있습니다. 크로스 컴파일 링 툴체인을 다운 그레이드하는 방법도 잘 작동하고 있습니다. (LD_LIBRARY_PATH 솔루션과 함께 "커널이 너무 오래된 오류"로 끝났습니다) 전체 문제가 해결되었지만, 특히 오래된 커널의 경우 더욱 까다 롭습니다.

CXX : 용액은 여기 지정된 CXX = 팔 리눅스 gnueabi-g ++

을 CXXFLAGS = -march = armv5 -mfloat-ABI = 소프트 -03 \ -msoft 플로트 -pipe \ -DPCAP_CREATE \ -std = C++ (1Y) -Wmissing --DIRS 포함 \ -D_GLIBCXX_USE_NANOSLEEP \ -g \ -를 추론-초기화 목록 -fno

그래서 나는 그것을 컴파일 건너 만들 수 없습니다 C++ 11 이상 및 libc15 함께 Armv5 작동하지 않습니다

감사의 말