Нет, вы не можете использовать одну и ту же общую библиотеку. Android не является GNU. Вам нужно скомпилировать свои библиотеки для Android.
Итак, мне снова нужно написать класс-оболочку в Android NDK?
Нет, вы можете написать это так, чтобы это работало для обоих. Вы должны отделить наш класс-оболочку JNI от класса main
, поскольку Android использует Activity
вместо main
.
Я бы также настоятельно рекомендовал бы не полагаться на dlclose
на любой платформе. API не является надежным и приведет к удивительному поведению с современным C ++. Один глобальный thread_local
с нетривиальным деструктором делает библиотеку недоступной для выгрузки, поэтому следующий dlopen
не сбросит состояние библиотеки, как вы могли бы ожидать. Если вам нужно реализовать логику инициализации / финализации для вашей библиотеки, сделайте явные функции Initialize
и Finalize
частью библиотеки и вызовите их напрямую.
Не зная полной архитектуры вашей архитектуры, я не могу быть уверен, но из приведенного вами примера я бы порекомендовал полностью удалить dlopen
/ dlsym
из вашего JNI и просто ссылаться на libCppTobeUsed
напрямую .