小编Wes*_*ugh的帖子

使用boost编译android应用程序,未定义引用'mbtowc'

我正在尝试使用boost 1-49的序列化库来编译一个Android应用程序.具体来说,这个项目有一些方便的脚本来完成工作:https://github.com/MysticTreeGames/Boost-for-Android

使用gnu-libstdc ++ 4.6为armeabi-v7a构建没有针对官方ndk-r8的问题.

至少,它能够创建libboost_serialization-gcc-mt-1_49.a而不会遇到任何错误.在构建期间抛出了几个警告,'禁止零大小数组'_pad'[-pedantic]','不支持'long long','不允许命名的变量宏',没有什么看起来很严重,但我不知道声称自己是gnu编译器的专家.

构建boost也创建了libboost_wserialization-gcc-mt-1_49.a,这似乎很奇怪,但可能无关紧要.我没有将它包含在我的makefile中.

无论如何,当我现在尝试使用此库编译我的代码时,我收到以下错误:

/Users/wespaugh/Development/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/libboost_serialization-gcc-mt-1_49.a(xml_iarchive.o): in function boost::archive::xml_iarchive_impl<boost::archive::xml_iarchive>::load(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&):./boost/archive/impl/xml_iarchive_impl.ipp:71: error: undefined reference to 'mbtowc'
/Users/wespaugh/Development/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/libboost_serialization-gcc-mt-1_49.a(xml_iarchive.o): in function boost::archive::xml_iarchive_impl<boost::archive::xml_iarchive>::load(wchar_t*):./boost/archive/impl/xml_iarchive_impl.ipp:101: error: undefined reference to 'mbtowc'
/Users/wespaugh/Development/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/libboost_serialization-gcc-mt-1_49.a(xml_iarchive.o): in function boost::archive::xml_iarchive_impl<boost::archive::naked_xml_iarchive>::load(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&):./boost/archive/impl/xml_iarchive_impl.ipp:71: error: undefined reference to 'mbtowc'
/Users/wespaugh/Development/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/libboost_serialization-gcc-mt-1_49.a(xml_iarchive.o): in function boost::archive::xml_iarchive_impl<boost::archive::naked_xml_iarchive>::load(wchar_t*):./boost/archive/impl/xml_iarchive_impl.ipp:101: error: undefined reference to 'mbtowc'
/Users/wespaugh/Development/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/libboost_serialization-gcc-mt-1_49.a(xml_oarchive.o): in function boost::archive::iterators::ostream_iterator<char> std::__copy_move<false, false, std::input_iterator_tag>::__copy_m<boost::archive::iterators::mb_from_wchar<boost::archive::iterators::xml_escape<wchar_t const*> >, boost::archive::iterators::ostream_iterator<char> >(boost::archive::iterators::mb_from_wchar<boost::archive::iterators::xml_escape<wchar_t const*> >, boost::archive::iterators::mb_from_wchar<boost::archive::iterators::xml_escape<wchar_t const*> >, boost::archive::iterators::ostream_iterator<char>):./boost/archive/iterators/mb_from_wchar.hpp:91: error: undefined reference to …
Run Code Online (Sandbox Code Playgroud)

android boost boost-serialization android-ndk cocos2d-x

6
推荐指数
1
解决办法
2444
查看次数

如何为android实现mbtowc?(或者,理想情况下,如何不?)

我正在尝试构建一个使用boost序列化的Android应用程序.我使用arm 4.7的g ++构建了针对NDK r8d的库.然而,当我使用ndk-build将我的本机代码编译到库中时,当编译器尝试从boost头文件中链接一些代码时,我得到"对'mbtowc'的未定义引用"和"对'wctomb'的未定义引用" .

关于NDK是否支持这些功能,我似乎无法得到明确的答案.

虽然它实现了这些功能,但根据Boost邮件列表,CrystaX NDK不是一个选项,因为它在与Boost一起使用时会发生崩溃.

那么,如果NDK以某种方式实现这些功能,为什么NDK-build无法链接它们呢?我可以在NDK中的cstdlib中找到对它们的引用,我相信可能有一个我需要设置的标志,但我不确定如何或在何处这样做.

如果没有实现它们,有没有人对我如何自己编写它们有任何建议?我大致知道mbtowc及其补充应该做什么,但没有很多编写低级C的经验,并且对Android/ARM架构没有太多了解,我真的可以使用一些建议来做到这一点.

c android boost arm android-ndk

4
推荐指数
1
解决办法
1786
查看次数

标签 统计

android ×2

android-ndk ×2

boost ×2

arm ×1

boost-serialization ×1

c ×1

cocos2d-x ×1