2015-01-28 3 views
0

최근에 Android NDK를 사용하기 시작했으며 공유 라이브러리에 몇 가지 문제가 있습니다.
Eclipse로 NDK 및 네이티브 함수를 사용할 수있는 프로젝트를 만들었습니다. 하지만 이제는 QtCreator로 만든 다른 공유 라이브러리를 사용하고 싶습니다.

여기 내 질문이 있습니다. NDK 프로젝트에 공유 라이브러리를 포함 할 수 있습니까? ndk-build를 호출하지 않아도 만들 수 있습니까?

예를 들어 보겠습니다. 나는 그런 간단한 공유 라이브러리를 작성하는 경우 : 내가 할 수공유 라이브러리 및 Android NDK

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE   := api 
LOCAL_SRC_FILES   := ../sharedLibs/libapi.so 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE   := dbapi 
LOCAL_SRC_FILES   := dbapi.cpp 
LOCAL_C_INCLUDES  += ../includes 
LOCAL_SHARED_LIBRARIES := api 

include $(BUILD_SHARED_LIBRARY) 

그리고 물론 :

g++ -Wall -shared -fPIC -o libapi.so MyDLL.cpp 

나는이 (Android.mk)처럼 내 NDK 프로젝트에서 사용할 수 없습니다 내 기본 NDK 측면에서 해당 기능을 사용할 수 있습니까? 내 이클립스 프로젝트를 빌드 할 때이 방법을 사용 는

,이 오류에 직면하고있어 (? 참, 거짓)

/libs/armeabi-v7a/libapi.so: File format not recognized 

가 내 공유 lib 디렉토리는 NDK 빌드와 호환되지 생각했다.

답변 해 주셔서 감사합니다.

답변

2

공유 라이브러리를 어떻게 만들었습니까? NDK가 팔에 맞게 컴파일되어 있습니까? 그렇지 않으면 작동하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 나는이 단일 커맨드 라인 인'g ++ -Wall -shared -fPIC -o libapi.so MyDLL.cpp'을 사용하여 빌드했다. 그래서 당신이 말하는 것에 따르면, ndk 빌더를 사용하지 않으면이 라이브러리를 포함 할 수 없습니까? – Sierra

+0

그래서 gd ++에서 g ++가 아닌 배포본의 g ++를 사용하여 리눅스에서 컴파일 하시겠습니까? – Gerald

+0

나는 cygwin을 사용하여 ndk g ++없이 윈도우에있다. 내 C++ 프로젝트 용 Android.mk를 만들려고했는데 ndk-build를 호출했습니다 ... 작동합니다, 감사합니다 :) – Sierra

1

의견에있는 사람들은 팔 대신 ​​x86 용으로 거의 컴파일되었음을 나타냅니다. (당신이 윈도우즈에서 cygwin을 사용하고 있다고 가정한다면, 윈도우 박스가 팔 상자가 아니라면 기본적으로 x86으로 컴파일 될 것입니다.)

안드로이드 ndk 안의 make- 독립 실행 형 도구 모음 .sh. 당신이 당신의 NDK가 설치되어있는 현재 디렉토리에있는 경우, 당신은 입력하여이를 사용할 수 있습니다

./android-ndk-r9/build/tools/make-standalone-toolchain.sh --platform=<your desired android platform> --install-dir=<location where you want android toolchain> 

이것은 당신이 당신의 장치에 실행할 팔 바이너리를 작성하는 데 사용할 수있는 빌드 도구의 집합을 만들 것입니다. 이러한 도구의 이름은 다음과 같습니다.

arm-linux-androideabi-gcc 

경로에 해당 도구를 배치하고 라이브러리를 작성하는 데 사용하십시오.

Cygwin에서는 "파일"명령이 포함되어 있는지 나도 몰라,하지만 당신은 입력하여 공유 라이브러리의 구조를 확인할 수 있습니다 : 당신은, 그것이 팔 말한다 경우

file libapi.so 

을 좋은. 그것이 x86이라면, 그것은 작동하지 않을 것입니다 (x86 안드로이드 장치를 제외하고).

+0

실제로'libapi.so' 파일은 MS Windows 용'x86-64'를 반환합니다. 설명 해줘서 고마워. – Sierra

관련 문제