2016-04-11 17 views
0

NDK ile derleme .cpp dosyası ile bazı sorunlar yaşıyorum. Statik kütüphane libIrmaMatrix'i bulmakta değil gibi görünüyor. Baska öneri? Ben olduğum zaman olsun hata sert nedenini kullanıyorumAndroid NDK paylaşılan kütüphane derleme sorunları statik kütüphanesi derleyemiyor

[armeabi-v7a-hard] SharedLibrary : libAVL.so 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(Connection.o): in function iris::drivers::Connection::~Connection():Connection.cpp(.text+0x39c): error: undefined reference to '__assert_fail' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(Connection.o): in function iris::drivers::Connection::~Connection():Connection.cpp(.text+0x4a8): error: undefined reference to '__assert_fail' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(Connection.o): in function iris::drivers::Connection::~Connection():Connection.cpp(.text+0x5b4): error: undefined reference to '__assert_fail' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(Connection.o): in function iris::drivers::Connection::unregisterSensor(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):Connection.cpp(.text+0x77c): error: undefined reference to '__assert_fail' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(LogFile.o): in function iris::utilities::LogFile::readEntryAt(long long):LogFile.cpp(.text+0x208): error: undefined reference to 'std::basic_istream<char, std::char_traits<char> >::seekg(std::fpos<__mbstate_t>)' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(DriverManager.o): in function iris::drivers::DriverManager::loadDrivers(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool):DriverManager.cpp(.text+0x1d8c): error: undefined reference to 'boost::filesystem::detail::directory_iterator_construct(boost::filesystem::directory_iterator&, boost::filesystem::path const&, boost::system::error_code*)' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(DriverManager.o): in function iris::drivers::DriverManager::loadDrivers(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool):DriverManager.cpp(.text+0x1dec): error: undefined reference to 'boost::filesystem::detail::directory_iterator_increment(boost::filesystem::directory_iterator&, boost::system::error_code*)' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(DriverManager.o): in function void boost::checked_delete<boost::filesystem::detail::dir_itr_imp>(boost::filesystem::detail::dir_itr_imp*):DriverManager.cpp(.text._ZN5boost14checked_deleteINS_10filesystem6detail11dir_itr_impEEEvPT_+0x1c): error: undefined reference to 'boost::filesystem::detail::dir_itr_close(void*&, void*&)' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(DriverManager.o): in function boost::detail::sp_counted_impl_p<boost::filesystem::detail::dir_itr_imp>::dispose():DriverManager.cpp(.text._ZN5boost6detail17sp_counted_impl_pINS_10filesystem6detail11dir_itr_impEE7disposeEv+0x20): error: undefined reference to 'boost::filesystem::detail::dir_itr_close(void*&, void*&)' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(DriverManager.o): in function boost::filesystem::directory_iterator::directory_iterator(boost::filesystem::path const&):DriverManager.cpp(.text._ZN5boost10filesystem18directory_iteratorC1ERKNS0_4pathE+0xb8): error: undefined reference to 'boost::filesystem::detail::directory_iterator_construct(boost::filesystem::directory_iterator&, boost::filesystem::path const&, boost::system::error_code*)' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(DriverManager.o): in function boost::filesystem::detail::recur_dir_itr_imp::increment(boost::system::error_code*):DriverManager.cpp(.text._ZN5boost10filesystem6detail17recur_dir_itr_imp9incrementEPNS_6system10error_codeE+0x58): error: undefined reference to 'boost::filesystem::directory_entry::m_get_symlink_status(boost::system::error_code*) const' 
............ 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(utf8wchar.o): in function gcc_coding_to_coding(char const*, char const*, char const*, unsigned int, char*, unsigned int):utf8wchar.cpp(.text+0xd8): error: undefined reference to 'iconv' 
/home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: jni/iris/sensor-api/static/libIrmaMatrix.a(utf8wchar.o): in function gcc_coding_to_coding(char const*, char const*, char const*, unsigned int, char*, unsigned int):utf8wchar.cpp(.text+0xe8): error: undefined reference to 'iconv_close' 
collect2: ld returned 1 exit status 
make: *** [obj/local/armeabi-v7a-hard/libAVL.so] Error 1 

:

İşte benim Android.mk

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true 
LOCAL_PATH := $(call my-dir) 

#IrmaMatrixLib 
include $(CLEAR_VARS) 
LOCAL_MODULE := irmaMatrix 
$(warning $(TARGET_ARCH_ABI)) 
LOCAL_SRC_FILES := iris/sensor-api/static/libIrmaMatrix.a 
LOCAL_LDLIBS = -lz -lm -lc 
include $(PREBUILT_STATIC_LIBRARY) 

##BoostSystem 
include $(CLEAR_VARS) 
LOCAL_MODULE := libSystem 
LOCAL_SRC_FILES := boost/lib/libboost_system-gcc-mt-1_55.a 
include $(PREBUILT_STATIC_LIBRARY) 

#libAtomic 
include $(CLEAR_VARS) 
LOCAL_MODULE := libAtomic 
LOCAL_SRC_FILES := boost/lib/libboost_atomic-gcc-mt-1_55.a 
include $(PREBUILT_STATIC_LIBRARY) 

#libChrono 
include $(CLEAR_VARS) 
LOCAL_MODULE := libChrono 
LOCAL_SRC_FILES := boost/lib/libboost_chrono-gcc-mt-1_55.a 
include $(PREBUILT_STATIC_LIBRARY) 

#libProgramOptions 
include $(CLEAR_VARS) 
LOCAL_MODULE := libProgramOptions 
LOCAL_SRC_FILES := boost/lib/libboost_program_options-gcc-mt-1_55.a 
include $(PREBUILT_STATIC_LIBRARY) 

#libThread 
include $(CLEAR_VARS) 
LOCAL_MODULE := libThread 
LOCAL_SRC_FILES := boost/lib/libboost_thread-gcc-mt-1_55.a 
include $(PREBUILT_STATIC_LIBRARY) 
include $(CLEAR_VARS) 

LOCAL_CFLAGS += -I$(LOCAL_PATH)/boost/include/boost-1_55 
LOCAL_EXPORT_C_INCLUDE_DIRS += -I$(LOCAL_PATH)/boost/include/boost-1_55 
LOCAL_EXPORT_C_INCLUDE_DIRS += -I$(LOCAL_PATH)/include/iris/sensor-api 
LOCAL_EXPORT_C_INCLUDE_DIRS += -I$(LOCAL_PATH)/prebuild/static/libIrmaMatrix.a 
LOCAL_MODULE := AVL 
LOCAL_MODULE_FILENAME:= libAVL 
LOCAL_SRC_FILES := AVL.cpp 
LOCAL_STATIC_LIBRARIES := irmaMatrix 
LOCAL_STATIC_LIBRARIES += libSystem 
LOCAL_STATIC_LIBRARIES += libAtomic 
LOCAL_STATIC_LIBRARIES += libThread 
LOCAL_STATIC_LIBRARIES += libChrono 
LOCAL_STATIC_LIBRARIES += libProgramOptions 
LOCAL_LDLIBS := -lz -lm -lc 

include $(BUILD_SHARED_LIBRARY) 

Application.mk

APP_ABI := armeabi-v7a-hard 
#APP_STL := stlport_static 
APP_CFLAGS += -mfloat-abi=hard 
APP_STL := gnustl_static 
APP_MODULES := AVL 
APP_PLATFORM := android-18 
APP_CPPFLAGS := -frtti -fexceptions 

takiben hataları Sadece armeabi-v7a kullanarak m: VFP kayıt argümanlarını kullanır, çıktı

cevap

0

Linker, standart C++ kitaplık işlevlerinin tanımlarını bulamıyor ve ayrıca destek kitaplığında da işlev görüyor. boost kütüphaneler ve libIraMatrix için, muhtemelen, aşağıdaki gibi bir şey yapabiliriz, Makefiledaki doğru boost ve libIraMatrix için kütüphane yollarını belirlemek zorunda ayarlarında yukarıdaki

LOCAL_LDLIBS := -L/path/to/the/library 

kullanın

LOCAL_STATIC_LIBRARIES := irmaMatrix 
LOCAL_STATIC_LIBRARIES += libSystem 
LOCAL_STATIC_LIBRARIES += libAtomic 
LOCAL_STATIC_LIBRARIES += libThread 
LOCAL_STATIC_LIBRARIES += libChrono 
LOCAL_STATIC_LIBRARIES += libProgramOptions 

kontrol edin. Umarım yardımcı olur.

+0

Ben 1 hata telafi etti: /home/manevbg/Documents/android-sdks/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/ .. /lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a-hard/objs/AVL /AVL.o: işlev içinde device_scan: jni/AVL.cpp: 255: hata: 'iris :: drivers için tanımlanmamış başvuru :: DriverManager :: getInstance()' | statik jint device_scan (JNIEnv * env, jobject öğesi, jint asdf) { \t DriverManager & dm = DriverManager :: getInstance(); \t 0; } | Nesne bulunamadığı gibi görünüyor ama .a lib derlenmiş olması gerektiği gibi olmalıdır ... –

+0

Statik yöntemin tanımı gibi görünüyor iris :: drivers :: DriverManager :: getInstance() 'bulunamadı. Lütfen bu işlevin uygulandığı yeri kontrol edin ve derleme sırasında .cpp dosyasını düzgün bir şekilde ekleyin. –

+0

Sorun şu ki, kaynaklarla (libIrmaMatrix.a) ancak .cpp dosyaları değil, sınıfları ve statik kitaplık başlık dosyalarına sahip olduğumu ve ne yapacağımı bilmiyorum .. –