Ошибки компоновщика при компоновке предварительно скомпилированной статической библиотеки - PullRequest
0 голосов
/ 26 июня 2018

У меня большой проект, написанный на 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 функциями, потому что я как-то получаю ошибки компоновщика для вещей, которые должны быть в стандартной библиотеке. Есть идеи, что мне не хватает?

...