У меня большая база кода со смешанным кодом C и C ++. Он встроен в библиотеки, а затем в исполняемый файл, работающий на устройствах на базе android. Это «внешняя система сборки», которая не использует gradle. После того, как вся компиляция и библиотеки построены, последняя команда компоновки будет выглядеть примерно так:
armv7a-linux-androideabi30-clang++ -pie -static-libstdc++ -o a.out -L...-lmylib1 -lmylib2 -lm -llog
Когда программа запускается, я получаю «не могу найти символ fread_unlocked». Когда я смотрю на расширение этой команды ссылки под капотом с помощью - ###, clang ++ автоматически добавляет -l c и -lg cc среди других библиотек (в противном случае я бы добавил их сам).
С другой стороны, я попытался связать c ++ stdlib (stl one, libc ++) с C компоновщиком
armv7a-linux-androideabi30-clang -o a.out -L...-lmylib1 -lmylib2 -lm -llog -lc++
Когда программа выполняется, я получаю сообщение «не могу найти libc ++ _ shared.so ". Я не хочу копировать какие-либо общие библиотеки вместе с моим приложением, поэтому я предпочитаю, чтобы библиотека c ++ была статически связана, но я не вижу способа сделать это с помощью clang. Если я попытаюсь статически связать все это с помощью -stati c, он не сможет найти stati c версии liblog среди других. И я подтвердил, что в последней версии ndk нет liblog.a (только liblog.so).
Итак, я считаю, что моя основная c потребность - связать смесь кода C и C ++, вместе со средами выполнения C и C ++ и не имеют общих зависимостей библиотеки от цели.