Ошибка связи с Boost на Android - PullRequest
       13

Ошибка связи с Boost на Android

2 голосов
/ 07 декабря 2011

Я успешно построил некоторые библиотеки boost, но когда я включаю их в тестовый проект, я получаю ошибки ссылок.

Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup       : libs/armeabi/gdb.setup
Compile++ thumb  : hello-jni <= test.cpp
SharedLibrary  : libhello-jni.so
libboost_timer.a(cpu_timer.o): In function `~basic_iostream':
/opt/android-ndk-r7/sources/boost/../../sources/cxx-stl/gnu-libstdc++/include/istream:795: undefined reference to `VTT for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >'
libboost_timer.a(cpu_timer.o): In function `show_time':
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:61: undefined reference to `VTT for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >'
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:61: undefined reference to `vtable for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >'
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:61: undefined reference to `vtable for std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >'
libboost_timer.a(cpu_timer.o): In function `boost::timer::format(boost::timer::cpu_times const&, short, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:177: undefined reference to `std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()'
collect2: ld returned 1 exit status

Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS = -fexceptions  

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c test.cpp
LOCAL_STATIC_LIBRARIES := boost_timer, boost_system
LOCAL_LDLIBS := libboost_system.a libboost_timer.a libboost_chrono.a libboost_iostreams.a
include $(BUILD_SHARED_LIBRARY)
  $(call import-module,boost) 

и test.cpp

#include "test.hpp"
#include <string>
#include <boost/timer/timer.hpp>

void mytest() {
boost::timer::cpu_timer t;
}

1 Ответ

1 голос
/ 16 июня 2012

у нас была очень похожая проблема.Для нас помогло добавить -lgnustl_static в конце строки LOCAL_LDLIBS в Android.mk.Например:

LOCAL_LDIBS := -lboost_system .... -lgnustl_static

Я думаю, это потому, что библиотеки boost зависят от STL, но не имеют статической компиляции, поэтому об этом нужно упомянуть явно.

Кроме того, кажется, вам не нужно добавлять строку APP_STL := gnustl_static к Application.mk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...