2012-07-12 37 views
5

Tôi đang cố gắng cài đặt tăng 1.5 vào android theo this.lỗi khi biên dịch tăng trong android

Khi tôi biên dịch, tôi gặp lỗi. Dưới đây là một đoạn của lỗi biên dịch:

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

tôi thấy lỗi này mà tôi không hiểu ...

./boost/thread/pthread/thread_data.hpp:42: error: 'PAGE_SIZE' was not declared in this scope. Nó nói rằng PAGE_SIZE không được khai báo, nhưng tôi không biết điều đó có nghĩa là gì. Và khi tôi cố gắng nhìn vào vị trí cụ thể đó trong mã, tôi không tìm thấy PAGE_SIZE.

Trả lời

4

Lỗi biên dịch như thế này thường được giải quyết bằng cách xem trước ở đầu ra được xử lý trước. Hãy thử thay thế -c bằng -E và thay đổi foo.o thành foo.pp (hoặc cái gì khác) và xem lại tệp foo.pp do lỗi (tìm kiếm set_stack_size).

Đây là mã có liên quan:

 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() mở rộng tới một cái gì đó mà tham chiếu PAGE_SIZE. Tôi khá chắc chắn sysconf là Right Way (tm) để có được kích thước trang những ngày này, nhưng các nhà duy trì tăng có thể đã có một lý do chính đáng để sử dụng getpagesize(). Bất kể, bạn có thể tránh lỗi cụ thể này với đối số biên dịch -DPAGE_SIZE=2048 hoặc bất kỳ kích thước trang nào của mục tiêu của bạn. Hoặc là, hoặc vá nguồn để sử dụng sysconf(_SC_PAGESIZE) thay thế.

+0

IT WORKS vỚI DOANH NGHIỆP - pr oblem nằm trong dòng ::: if (size -DPAGE_SIZE = 2048. câu hỏi của tôi bây giờ là, sẽ thêm 2048 theo cách này là một giải pháp tốt ?? và cảm ơn bạn đã trả lời. – solti

+1

Nó không phải là một giải pháp lý tưởng, nhưng nó là đủ (nhưng chỉ khi kích thước trang thực sự là 2048). –

+0

hey brian, thực sự đánh giá cao câu trả lời của bạn .. tôi đã cài đặt thư viện tăng vào boost1.5/android/lib. Vấn đề là tôi chỉ nhận được vài thư viện tĩnh của tăng .. tôi thực sự cần tất cả các thư viện tăng kể từ khi tôi đang cố gắng để cài đặt một thư viện vào android mà phụ thuộc vào tăng + (lib khác). bạn nghĩ tôi nên làm gì ?? – solti

7

Đã xảy ra sự cố với mức tăng 1,50, ndk-r8b.

Nhờ chủ đề này tôi cố gắng làm cho nó cố định với những thay đổi sau đây:

tập tin tăng/thread/thread.hpp

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

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

Lưu ý rằng tôi cũng cần thiết để thay đổi điều này kể từ khi tăng 1.50:

tập tin tăng/libs/hệ thống tập tin/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

Để ghi lại, điều này dường như được cố định trong NDK R8E – yano

Các vấn đề liên quan