У меня большой проект, написанный на C ++ с использованием библиотек Qt, и у меня есть другая библиотека, написанная на Java. Теперь я хотел бы написать приложение для Android, которое может использовать обе библиотеки.
Поскольку я не хочу возиться с библиотеками Qt в Android Studio (пожалуйста, скажите мне, если есть более простой способ), я решил, что будет проще создать статическую установку qt для Android, предварительно скомпилировать проект с использованием qt creator (упаковывая все зависимости с ним), а затем импортируйте предварительно скомпилированную библиотеку в Android Studio. Все сработало, кроме шага связывания. Я подозреваю, что это как-то связано со всеми вещами extern "C"
.
Примечание: я не смог заставить qt выплевывать общий объектный файл, но мне удалось получить статическую библиотеку, полную объектных файлов (даже файлов Qt).
Я получаю ошибки компоновщика, подобные этим:
../../../../lib/armeabi-v7a/libapi.a(api.o):api.cpp:function IfStreamQIODeviceWrapper::seek(long long): error: undefined reference to 'std::istream::seekg(std::fpos<mbstate_t>)'
../../../../lib/armeabi-v7a/libapi.a(api.o):api.cpp:function TestAPI_loadFile: error: undefined reference to 'QIODevice::QIODevice()'
../../../../lib/armeabi-v7a/libapi.a(api.o):api.cpp:function TestAPI_loadFile: error: undefined reference to 'std::istream::seekg(long long, std::_Ios_Seekdir)'
../../../../lib/armeabi-v7a/libapi.a(api.o):api.cpp:function TestAPI_loadFile: error: undefined reference to 'std::istream::tellg()'
Но libapi.a действительно содержит эти символы (в соответствии с nm):
nm -C libapi.a|grep -n5 std::istream::seekg
172- U std::istream::read(char*, int)
173: U std::istream::seekg(std::fpos<mbstate_t>)
174: U std::istream::seekg(long long, std::_Ios_Seekdir)
175- U std::istream::tellg()
176-00000001 W std::_List_base<Ms::SynthesizerGroup,
std::allocator<Ms::SynthesizerGroup> >::_M_clear()
177-00000001 W std::_List_base<Ms::IdValue,
std::allocator<Ms::IdValue> >::_M_clear()
Так что на самом деле это не ограничивается связанными с Qt функциями, потому что я как-то получаю ошибки компоновщика для вещей, которые должны быть в стандартной библиотеке. Есть идеи, что мне не хватает?