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レジスタの引数を使用し、出力は
私は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がコンパイルされているように見えます。 –
静的メソッドの定義に似ています。 'iris :: drivers :: DriverManager :: getInstance()'が見つかりません。この機能が実装されている場所を確認し、コンパイル時に.cppファイルを適切にインクルードしてください。 –
問題は、クラスとスタティックライブラリのヘッダファイル(libIrmaMatrix.a)がソースファイル(libIrmaMatrix.a)のみで、.cppファイルではないことと、何をするのか混乱していることです。 –