2016-04-11 21 views
0

NDKを使って.cppファイルをコンパイルする際にいくつか問題があります。静的ライブラリlibIrmaMatrixが見つからないようです。助言がありますか?私は「ときに私が得るエラーのハード原因を使用していAndroid NDK共有ライブラリのコンパイル時に静的ライブラリをコンパイルできない

[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 

は、ここに私の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 

次のエラーですarmeabi-v7aのみを使用している場合:はVFPレジスタの引数を使用し、出力は

答えて

0

標準的なC++ライブラリ関数の定義を見つけることができず、また、boostライブラリでも関数を見つけることができません。 boostライブラリとlibIraMatrixのために、おそらく、あなたは以下のような何かを行うことができ、Makefileで正しくboostlibIraMatrixのためのライブラリパスを設定する必要が設​​定上記

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

使用を

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

を確認してください。それが役に立てば幸い。

+0

私は1つのエラーにそれを作っ: /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:関数内のdevice_scan:jni/AVL.cpp:255:エラー: 'iris :: drivers :: DriverManager :: getInstance()'への未定義参照 | スタティックjint device_scan(JNIEnv * env、jobject thiz、jint asdf){ \t DriverManager&dm = DriverManager :: getInstance(); \t return 0; } | オブジェクトのように見えますが、.a libがコンパイルされているように見えます。 –

+0

静的メソッドの定義に似ています。 'iris :: drivers :: DriverManager :: getInstance()'が見つかりません。この機能が実装されている場所を確認し、コンパイル時に.cppファイルを適切にインクルードしてください。 –

+0

問題は、クラスとスタティックライブラリのヘッダファイル(libIrmaMatrix.a)がソースファイル(libIrmaMatrix.a)のみで、.cppファイルではないことと、何をするのか混乱していることです。 –

関連する問題