2012-12-06 10 views
5

मैं FFTW लाइब्रेरी को पोर्ट करने और के 2.1.5 संस्करण का उपयोग करके एंड्रॉइड में कुछ .cpp फ़ाइलों को पोर्ट करने का प्रयास कर रहा हूं। मैंने इसे & कॉन्फ़िगरेशन का उपयोग करके संकलित किया है और मैं इसे प्री-बिल्ट लाइब्रेरी के रूप में उपयोग करने का प्रयास करता हूं। मेरी NDK परियोजना में सब कुछ नहीं त्रुटियों के साथ संकलित, लेकिन जब मैं निम्नलिखित त्रुटि मिलती है लिंकिंग:एंड्रॉइड एनडीके: कोई संग्रह प्रतीक तालिका

Compile++ thumb : water <= vertex.cpp 
Compile++ thumb : water <= face.cpp 
Compile++ thumb : water <= Solver.cpp 
Compile++ thumb : water <= Water.cpp 
SharedLibrary : libwater.so 
/Users/Xavi/Documents/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: /Users/Xavi/Documents/workspace/mmm/obj/local/armeabi/libfftw.a: no archive symbol table (run ranlib) 

मेरे Android.mk कोड निम्नलिखित

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := fftw 
LOCAL_SRC_FILES := fftw/lib/libfftw.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := water 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/water/include 
LOCAL_SRC_FILES := \ 
water/src/vertex.cpp \ 
water/src/face.cpp \ 
water/src/Solver.cpp \ 
water/src/Water.cpp 
LOCAL_STATIC_LIBRARIES := fftw 
include $(BUILD_SHARED_LIBRARY) 

मैं कुछ गलत कर रहा हूँ है, या यह है FFTW लाइब्रेरी को एक अलग तरीके से संकलित करने के लिए बेहतर है?

+0

इस प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/7234629/linking-fftw-into-an-android-ndk-application – Entreco

+0

बिल्ड करने के लिए आप किस कंपाइलर का उपयोग करते थे FFTW? आपको या तो अकेले स्टैंड एंड्रॉइड टूलचैन उत्पन्न करना होगा, एफएफटीडब्ल्यू को एनडीके बिल्ड सिस्टम (एंड्रॉइड.एमके इत्यादि) में अनुकूलित करना होगा, या अब अप्रचलित रैपर हैक्स में से एक का उपयोग करना होगा - आप एंड्रॉइड टूलचैन बाइनरी को आसानी से नहीं खोल सकते हैं जिस तरह से एनएनडीके वितरण का तरीका बनता है आप कुछ साधारण क्रॉस कंपाइलर से होंगे। –

+0

पुस्तकालय ऐप्पल 'सीसी' कंपाइलर, संस्करण 3.1 के साथ बनाया गया था। मैं पुस्तकालय को एनडीके के माध्यम से संकलित करने की कोशिश करूंगा, लेकिन फिर मुझे लगता है कि मुझे समझ में नहीं आता कि प्री-बिल्ट लाइब्रेरी का उपयोग कैसे करें – gibon

उत्तर

0

यह मेरे लिए काम कर रहा है।

LOCAL_PATH := $(call my-dir) 
ROOT_PATH := $(LOCAL_PATH) 

include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 

LOCAL_PATH = $(ROOT_PATH) 
LOCAL_CFLAGS := -Wall -Wextra 

LOCAL_MODULE := water 

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
LOCAL_STATIC_LIBRARIES := fftw3 
LOCAL_SRC_FILES := \ 
water/src/vertex.cpp \ 
water/src/face.cpp \ 
water/src/Solver.cpp \ 
water/src/Water.cpp 

include $(BUILD_SHARED_LIBRARY) 

और मैं एंड्रॉयड NDK toolchain इस्तेमाल किया निर्माण करने के लिए FFTW यह मेरा build.sh है। अपने Android प्रोजेक्ट फ़ोल्डर में इस रखो और इसे चलाने और मूल फ़ोल्डर

#!/bin/sh 
# fftw3/build.sh 
# Compiles fftw3 for Android 
# Make sure you have NDK_ROOT defined in .bashrc or .bash_profile 

INSTALL_DIR="`pwd`/app/jni/fftw3" 
SRC_DIR="`pwd`/../fftw-3.3.4" 

cd $SRC_DIR 

export 
    PATH="<your path>/android-ndk-r11c/toolchains/arm-linux-androideabi- 4.9/prebuilt/darwin-x86_64/bin:$PATH" 
export SYS_ROOT="<your path>/android-ndk-r11c/platforms/android-17/arch-arm/" 
export CC="arm-linux-androideabi-gcc --sysroot=$SYS_ROOT" 
export LD="arm-linux-androideabi-ld" 
export AR="arm-linux-androideabi-ar" 
export RANLIB="arm-linux-androideabi-ranlib" 
export STRIP="arm-linux-androideabi-strip" 

mkdir -p $INSTALL_DIR 
./configure --host=arm-linux-androideabi --build=x86_64-apple-darwin -- 
prefix=$INSTALL_DIR LIBS="-lc -lgcc" 

make 
make install 

exit 0 

में FFTW डाल फ़ोल्डर और आप FFTW मिलेगा एप्लिकेशन/JNI में फ़ोल्डर और यह बिन में शामिल हैं, लिब, शेयर फोल्डर और lib में शामिल होंगे फ़ोल्डर आपको libfftw3.a

संबंधित मुद्दे