2013-10-08 3 views
4

"-mfloat-abi = hard"매개 변수가있는 라이브러리 (libxxx.so)가 미리 빌드되었습니다. 이제이 lib로 내 원시 코드를 컴파일하고 ndk로 lib (.so)를 공유하고 싶습니다.Android NDK eabi - ndk에서 하드 디스크를 사용하는 방법을 아는 방법?

Application.mk :

APP_ABI := armeabi-v7a

Android.mk는 :

/softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: /Users/asmirnov/Documents/dev/src/project/obj/local/armeabi-v7a/objs-debug/xxx_wrapper/xxx_wrapper.o uses VFP register arguments, output does not /softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: /Users/asmirnov/Documents/dev/src/project/obj/local/armeabi-v7a/libxxx.so uses VFP register arguments, output does not collect2: ld returned 1 exit status

내가 그것을 어떻게 해결할 수 : ndk-build

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := xxx

LOCAL_SRC_FILES := libxxx.so

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS) LOCAL_MODULE := xxx_wrapper

LOCAL_SRC_FILES := xxx_wrapper.cpp xxx_wrapper.h

LOCAL_SHARED_LIBRARIES := xxx

LOCAL_C_INCLUDES := /softdev/host/include/

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

LOCAL_ARM_NEON := true

LOCAL_CXXFLAGS += -mfpu=vfp -mfloat-abi=hard

LOCAL_CFLAGS += -mfpu=vfp -mfloat-abi=hard

include $(BUILD_SHARED_LIBRARY)

내가 오류를 받고 있어요? 두 .o 파일은 출력에 따라 하드 플로트이며 "출력"의 의미를 파악할 수 없습니까? 내 모듈 설명에 '-mfpu = vfp -mfloat-abi = hard'를 추가했습니다.

업데이트 : ndk-build V = 1을 실행했는데 명령 줄에 "-mfpu = vfp -mfloat-abi = hard"인수가 없으므로 수동으로 시도했으나 여전히 어떤 결과가) :

mba-anton:build asmirnov$ /softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-g++ 

-Wl,-soname,libxxx_wrapper.so -shared --sysroot=/softdev/android-ndk-r8e/platforms/android-8/arch-arm /Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/objs-debug/xxx_wrapper/xxx_wrapper.o /Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libstdc++.a -lgcc /Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libxxx.so -no-canonical-prefixes -march=armv7-a -mfpu=vfp -mfloat-abi=hard -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -L/softdev/android-ndk-r8e/platforms/android-8/arch-arm/usr/lib -L/usr/lib -llog -lstdc++ -lc -lm -o /Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libxxx_wrapper.so /softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: /Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/objs-debug/xxx_wrapper/xxx_wrapper.o uses VFP register arguments, output does not /softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: /Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libxxx.so uses VFP register arguments, output does not collect2: ld returned 1 exit status

+0

HTTP와 유사 : // 유래를 .com/questions/16846430/hard-float-for-some-fun ctions-in-gcc/ – fadden

+0

예. 나는 검색했지만 단어 만 제외하고는 해결책이 없다. – 4ntoine

답변

1

당신은 할 수 없다이 : -march =하는 ARMv7-A -mfloat-ABI = softfp -mfpu = 한마디로

VFP "-mfloat-ABI = 하드"또는 "-mfloat-abi = softfp"인수는 하드웨어 또는 소프트웨어 FPU를 사용하는 것을 의미하지 않습니다.

자세한 내용은 Getting hardware floating point with android NDK을 참조하십시오. fadden은 위대하고 명확한 대답을 주었으므로 여기에서 반복하겠습니다.

1

솔루션 :

APP_ABI := armeabi-v7a-hard

대신

APP_ABI := armeabi-v7a

또한 당신이 Android.mk에서 이러한 플래그를 추가 할 수 있습니다

LOCAL_CXXFLAGS := -O2 -mfpu=vfpv3-d16 -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -march=armv7-a -mfloat-abi=hard 
LOCAL_CFLAGS := -O2 -mfpu=vfpv3-d16 -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -march=armv7-a -mfloat-abi=hard 
LOCAL_LDFLAGS := -lm_hard 
+2

armeabi-v7a-hard를 사용하지 않는 경우 LOCAL_LDFLAGS에도 -Xlinker --no-warn-mismatch를 추가해야했습니다. – tonylo

+0

더 이상 지원되지 않습니다. – PulseJet

관련 문제