2012-07-12 19 views
5

Estoy tratando de instalar boost 1.5 en android de acuerdo con this.error al compilar boost en android

Cuando compilo, me sale un error. Aquí es un fragmento del error de compilación:

gcc.compile.c++ bin.v2/libs/thread/build/gcc-android4.4.3/release/link-static/runtime-link- static/threading-multi/pthread/thread.o 
<command-line>: warning: "BOOST_FILESYSTEM_VERSION" redefined 
<command-line>: warning: this is the location of the previous definition 
In file included from ./boost/thread/thread.hpp:17, 
      from libs/thread/src/pthread/thread.cpp:11: 
./boost/thread/pthread/thread_data.hpp: In member function 'void boost::thread_attributes::set_stack_size(size_t)': 
./boost/thread/pthread/thread_data.hpp:42: error: 'PAGE_SIZE' was not declared in this scope 

"../../toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pedantic --sysroot=../../platforms/android-9/arch-arm -mthumb -Os -fno-strict-aliasing -O2 -DNDEBUG -g -lstdc++ -I../../sources/cxx-stl/gnu-libstdc++/include -I../../sources/cxx-stl/gnu-libstdc++/libs/armeabi/include -D__GLIBC__ -DBOOST_NO_INTRINSIC_WCHAR_T -DBOOST_FILESYSTEM_VERSION=2 -pthread -Wextra -Wno-long-long -pedantic -DBOOST_ALL_NO_LIB=1 -DBOOST_CHRONO_STATIC_LINK=1 -DBOOST_FILESYSTEM_VERSION=3 -DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_SYSTEM_STATIC_LINK=1 -DBOOST_THREAD_BUILD_LIB=1 -DBOOST_THREAD_POSIX -DNDEBUG -I"." -c -o "bin.v2/libs/thread/build/gcc-android4.4.3/release/link-static/runtime-link-static/threading-multi/pthread/thread.o" "libs/thread/src/pthread/thread.cpp" 

...failed gcc.compile.c++ bin.v2/libs/thread/build/gcc-android4.4.3/release/link-static/runtime-link-static/threading-multi/pthread/thread.o... 

me encontré con este error que yo no entiendo ...

./boost/thread/pthread/thread_data.hpp:42: error: 'PAGE_SIZE' was not declared in this scope. Dice PAGE_SIZE no fue declarado, pero no tengo idea de lo que eso significa. Y cuando traté de ver esa ubicación en particular en el código, no encontré PAGE_SIZE.

Respuesta

4

Los errores de compilación como este se suelen resolver mirando primero la salida preprocesada. Intente reemplazar -c con -E y cambie foo.o a foo.pp (o algo más) y revise el archivo foo.pp para buscar errores (busque set_stack_size).

Este es el código relevante:

 void set_stack_size(std::size_t size) BOOST_NOEXCEPT { 
      if (size==0) return; 
      std::size_t page_size = getpagesize(); 
#ifdef PTHREAD_STACK_MIN 
      if (size<PTHREAD_STACK_MIN) size=PTHREAD_STACK_MIN; 
#endif 
      size = ((size+page_size-1)/page_size)*page_size; 

getpagesize() amplía a algo que hace referencia a PAGE_SIZE. Estoy bastante seguro de que sysconf es la forma correcta (tm) de obtener el tamaño de página en estos días, pero los mantenedores de impulso podrían haber tenido una buena razón para usar getpagesize(). De todos modos, puede eludir este error específico con un argumento del compilador -DPAGE_SIZE=2048, o cualquiera que sea el tamaño de página de su destino. O eso, o parche la fuente para usar sysconf(_SC_PAGESIZE) en su lugar.

+0

ahora funciona - el pr oblem estaba en línea ::: if (tamaño -DPAGE_SIZE = 2048. mi pregunta ahora es: ¿agregar 2048 de esta manera será una buena solución? y gracias por tu respuesta. – solti

+1

No es una solución ideal, pero es adecuada (pero solo si el tamaño de la página es realmente 2048). –

+0

Hola Brian, realmente aprecio tu respuesta. Instalé la biblioteca de impulso en boost1.5/android/lib. El problema es que solo recibo poca biblioteca estática de impulso ... realmente necesito toda la biblioteca de impulso ya que estoy tratando de instalar una biblioteca en Android que dependa de boost + (otra lib). que crees que deberia hacer ?? – solti

7

Tuve este problema con 1.50 boost, ndk-r8b.

Gracias a este Tema I lograron obtener fijo con los cambios siguientes:

archivo de realce/hilo/thread.hpp

// Fix for missing macro 
#define PAGE_SIZE sysconf(_SC_PAGESIZE) 

#include <boost/thread/pthread/thread_data.hpp> 

Tenga en cuenta que también tenía que cambiar esto desde el 1,50 impulso:

archivo de realce/libs/sistema de archivos/src/operations.cpp

# ifdef BOOST_POSIX_API 

    const fs::path dot_path("."); 
    const fs::path dot_dot_path(".."); 
# include <sys/types.h> 
# include <sys/stat.h> 
# if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(ANDROID) 
#  include <sys/statvfs.h> 
#  define BOOST_STATVFS statvfs 
#  define BOOST_STATVFS_F_FRSIZE vfs.f_frsize 
# elif defined (ANDROID) 
#  include <sys/vfs.h> 
#  define BOOST_STATVFS statfs 
#  define BOOST_STATVFS_F_FRSIZE static_cast<boost::uintmax_t>(vfs.f_bsize) 
# else 
#  ifdef __OpenBSD__ 
#  include <sys/param.h> 
#  endif 
#  include <sys/mount.h> 
#  define BOOST_STATVFS statfs 
#  define BOOST_STATVFS_F_FRSIZE static_cast<boost::uintmax_t>(vfs.f_bsize) 
# endif 
+0

Para el registro, esto parece estar arreglado en NDK R8E – yano

Cuestiones relacionadas