Boost :: Spirit, ошибка компиляции - PullRequest
5 голосов
/ 29 декабря 2011

Я редко спрашиваю об ошибке компиляции, но следующие ошибки меня озадачили.

Я успешно скомпилировал библиотеки надстроек для Android и пытаюсь использовать его библиотеку Spirit для создания парсера. Но когда я попытался скомпилировать. Я получаю следующие ошибки.

Что касается первой ошибки в endian.hpp, думаю, мне нужно включить в файл тип процессора (Android). Но я понятия не имею, почему я получаю другие ошибки. Любая подсказка или намек будут оценены.

> In file included from
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/support/detail/integer/endian.hpp:37,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/support/detail/endian.hpp:24,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/binary/binary.hpp:16,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/binary.hpp:14,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi.hpp:18,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/include/qi.hpp:16,
>                  from D:/mywork/dev/eclWork/BoostTest/jni/ndkfoo.cpp:24:
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/detail/endian.hpp:74:3:
> error: #error The file boost/detail/endian.hpp needs to be set up for
> your CPU type. In file included from
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/directive.hpp:14,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi.hpp:19,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/include/qi.hpp:16,
>                  from D:/mywork/dev/eclWork/BoostTest/jni/ndkfoo.cpp:24:
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/directive/as.hpp:128:
> error: 'wstring' is not a member of 'std'
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/directive/as.hpp:128:
> error: 'wstring' is not a member of 'std'
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/directive/as.hpp:128:
> error: template argument 2 is invalid In file included from
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/math/special_functions/fpclassify.hpp:20,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/support/detail/sign.hpp:22,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/numeric/detail/real_impl.hpp:22,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/numeric/real.hpp:21,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi/numeric.hpp:17,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/home/qi.hpp:21,
>                  from C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/spirit/include/qi.hpp:16,
>                  from D:/mywork/dev/eclWork/BoostTest/jni/ndkfoo.cpp:24:
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/math/special_functions/detail/fp_traits.hpp:472:
> error: invalid application of 'sizeof' to incomplete type
> 'boost::STATIC_ASSERTION_FAILURE' 
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/math/special_functions/detail/fp_traits.hpp:
> In static member function 'static void
> boost::math::detail::fp_traits_non_native boost::math::detail::extended_double_precision>::get_bits(long double,
> uint32_t&)':
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/math/special_functions/detail/fp_traits.hpp:457:
> error: 'offset_' was not declared in this scope
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/math/special_functions/detail/fp_traits.hpp:
> In static member function 'static void
> boost::math::detail::fp_traits_non_native boost::math::detail::extended_double_precision>::set_bits(long
> double&, uint32_t)':
> C:/Progra~1/Android/android-ndk-r6b/sources/boost/boost/math/special_functions/detail/fp_traits.hpp:462:
> error: 'offset_' was not declared in this scope make: ***
> [/cygdrive/d/mywork/dev/eclWork/BoostTest/obj/local/armeabi/objs/ndkfoo/ndkfoo.o]
> Error 1

Ответы [ 3 ]

5 голосов
/ 05 сентября 2012

Может быть, немного поздно, но это можно легко исправить, добавив -D_LITTLE_ENDIAN к миксу.

2 голосов
/ 12 января 2013

Я недавно изменил свой endian.hpp с патчем, описанным здесь

https://github.com/MysticTreeGames/Boost-for-Android/commit/8e2a1811445c077bc42f9d241cf0546f707786f3

прекрасно работает

1 голос
/ 18 января 2012

Полагаю, ответ на ваш вопрос здесь .Кажется, что Android просто не поддерживает std :: wstring.Тем не менее, я думаю, что Spirit все еще должен работать (если задан endianess CPU) только с типом char - вы пробовали?

...