2014-04-09 1 views
1

우리 팀에는 방금 떠난 동료가 작성한 OpenCV 및 VLFeat를 기반으로하는 C++ 프로젝트가 있습니다.ARM/Android 용 대형 C++ 프로젝트 크로스 컴파일 - 문제 및 고려 사항

Nexus 4 (ARM) 용으로 크로스 컴파일하고 실행하고 프로필을 작성해야합니다 (gprof). 따라서 Java 래퍼와 NDK를 통과 할 필요가 없습니다. 응용 프로그램이 필요하지 않습니다.

크로스 컴파일에서 완전한 초보자이기 때문에 큰 문제가 있습니다. 모든 가이드와 튜토리얼은 NDK를 사용하는 데 도움이됩니다. 예를 들어 this 책은 전체 시스템을 설치하는 방법을 매우 잘 설명합니다 (Android SDK, NDK, Eclipse 및 OpenCV를 번들로 제공하는 NVIDIA Tegra 개발 키트 사용)

너무 많은 종속성이있는 큰 프로젝트를 크로스 컴파일한다고 생각합니까? 팔에 그것은 실행 가능한 선택권인가? 나는 또한 내가 크로스 컴파일 할 수있는 경우에도 코드가 작동하지 않을 것이라는 점을 우려하고있다.

그렇다면 유용하지 않은 OpenCV instructions 이외의 다른 방법을 설명하는 리소스를 친절하게 가르쳐 주시겠습니까?

만약 그렇다면 논쟁에서 저보다 많은 경험을 가진 누군가 NDK를 사용하는 것이 훨씬 더 나은 이유에 대해 토론 할 수 있다면 정말 감사 할 것입니다.

는 ------------- 편집 ------------

완벽을 위해, 나는 나의 진행되면서보고한다. 저는 ARM 용 OpenCV를 크로스 컴파일하여 정적 라이브러리를 생성했습니다. 또한 VLFeat를 성공적으로 크로스 컴파일했습니다.

이제 내가 두려워했던 일이 발생했습니다. make은 정의되지 않은 참조의 거대한 목록을 던집니다. &> 출력 in this pastebin의 머리글을 붙여 넣었습니다.

거친 크로스 컴파일이 절대로 작동하지 않을 것이라는 것을 거의 확신하고 있으며 NDK에서 전체 프로젝트를 다시 수행하는 것이 좋습니다. 분명히 누군가가 나를 모순 할 수 있기를 바랍니다.

미리 도움을 주셔서 감사합니다. 어떤 방향으로 돌릴 지 모르겠습니다.

+0

관심있는 개발자 나 문제 해결 방법에 대한 업데이트가 있습니까? 감사 – feisal

답변

1

NDK 컴파일 스크립트를 사용하지 않고 NDK 컴파일러와 일반 makefile 만 사용할 수 있습니다. NDK 컴파일러가 일반 GCC처럼 동작하도록 만드는 스크립트가 있습니다. https://code.google.com/p/android-cruft/. 이 스크립트는 4 년 전에 마지막으로 업데이트되었으므로 추가 성형 수술이 필요할 수 있습니다.

가장 큰 문제는 C 라이브러리의 비 호환성 또는 고급 C++ 기능에 대한 지원 누락입니다. 안드로이드는 다소 Frankenstein 시스템이지만 리눅스를 커널로 사용하지만 BSD는 C 라이브러리를 사용합니다. 많은 저수준 유틸리티는 그러한 환경에서 잘 컴파일되지 않습니다. 또한 많은 C++ 기능들이 libg ++ 라이브러리에 의존하고 있는데, 이는 GNU C 라이브러리와의 긴밀한 연계가 될 수 있습니다.

1

나는 당신의 pastebin을 보았다. 눈에 띄는 첫 번째 것은 libjpeg이거나 부족한 것입니다. 귀하의 링크 단계에 -ljpeg이 포함되지 않았는지 모르겠습니다. 또한 pthread 관련 자료가 필요합니다. Android는 pthread_mutex_init()을 포함하여 거의 모든 pthread 개의 API를 지원하지만 libpthread은 가지고 있지 않습니다. 대신이 모든 함수는 libc에 정의되어 있습니다. 어쩌면 다른 도서관도 빠져 있을지도 모른다.

0

우리는 OpenCV, boost, libjpeg-turbo를 포함한 큰 응용 프로그램을 만들고 있습니다.이 모든 것에 대해 우리는 NDake를 사용하는 Makefile을 생성하기 위해 CMake를 사용합니다. 링크 오류를 보면 링크 명령 행에 일부 라이브러리가 누락 된 것으로 보입니다. 아마도 .ljpeg. pthread를 위해, 나는 우리가 일하는 방식을 살펴볼 것입니다.