2012-07-12 11 views
5

thisに従ってブースト1.5をアンドロイドにインストールしようとしています。アンドロイドでブーストをコンパイル中にエラーが発生しました

コンパイルするとエラーが発生します。ここでコンパイルエラーの断片である:

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... 

は私が理解していなかったこのエラー...

./boost/thread/pthread/thread_data.hpp:42: error: 'PAGE_SIZE' was not declared in this scopeを見つけました。それはPAGE_SIZEが宣言されていないと言いますが、私はそれがどういう意味か分かりません。コード内のその特定の場所を調べようとしたとき、私はPAGE_SIZEが見つかりませんでした。

答えて

4

このようなコンパイルエラーは、通常、前処理された出力を調べることで解決されます。 -c-Eに置き換え、foo.ofoo.pp(または他のもの)に変更し、foo.ppファイルでエラーを確認してください(set_stack_sizeを検索してください)。

これは、関連するコードです:

 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()PAGE_SIZEを参照する何かに展開されます。私はかなり確信していますsysconfは最近のページサイズを取得する正しい方法ですが、ブーストメンテナーはgetpagesize()を使用する正当な理由があったかもしれません。それにかかわらず、-DPAGE_SIZE=2048コンパイラ引数を使用して、またはターゲットのページサイズが何であれ、この特定のエラーを回避できます。どちらか、または代わりにsysconf(_SC_PAGESIZE)を使用するソースをパッチします。

+0

ITが機能するようになりました - PRをoblemが並んでいます::: if(size -DPAGE_SIZE = 2048を追加する必要があります。私の質問は今、2048をこの方法で追加すると良い解決策になりますか?あなたの答えに感謝します。 – solti

+1

これは理想的な解決策ではありませんが、適切です(ただし、ページサイズが実際に2048の場合のみ)。 –

+0

ちょっとブライアン、本当にあなたの答えを感謝..私はboost1.5 /アンドロイド/ libにブーストライブラリをインストールしました。問題は私はブーストのいくつかの静的ライブラリを取得するだけです。私はブースト+(他のlib)に依存するアンドロイドにライブラリをインストールしようとしているので、私は実際にブーストのすべてのライブラリが必要です。私は何をすべきだと思いますか? – solti

7

1.50ブーストでこの問題が発生しました、ndk-r8b。私はそれが次のように変更して固定し得ることをどうにかこのスレッドに

ありがとう:私も1.50ブーストので、これを変更するために必要な

ファイルのブースト/スレッド/ thread.hpp

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

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

注:

ファイルのブースト/ libsに/ファイルシステム/ 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

これは固定ですNDK R8E – yano

関連する問題