ndk-build неопределенная ссылка на ошибку - PullRequest
0 голосов
/ 03 мая 2018

Я использую ndk-build для сборки набора общей библиотеки (.so) для моего проекта Android. Я настроил и сделал исходный код библиотеки C ++ ( gdal-2.2.2 ). все было в порядке. ("./ configure & make & make install" прошла успешно).

Итак, я создал мою папку jni, как эта документация .

но когда я пытаюсь использовать ndk-build в windows, я получаю много ошибок, таких как «Неопределенное отношение к чему-либо».

Я потратил много времени на этот проект. Есть ли кто-нибудь, чтобы помочь мне? Спасибо.

Обновление

Я использовал configure в Ubuntu 16.04 следующим образом:

./configure --prefix=/home/mahdi/Desktop/build/ --with-spatialite=yes --with-spatialite-soname=libspatialite.so --host=i686-linux-android  CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" LIBS="-lsupc++ -lstdc++"

После make & make setup step Я создал JNI. это мой каталог.

jniwrap
jni
  gdal
  Android.mk
  Application.mk
  gdal_wrap.cpp
  gdalconst_wrap.c  
  gnm_wrap.cpp  
  libgdal.a 
  ogr_wrap.cpp
  osr_wrap.cpp

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := gdal
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/gdal/include
LOCAL_SRC_FILES := libgdal.a
LOCAL_EXPORT_LDLIBS := -lz
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := gdaljni
LOCAL_SRC_FILES := gdal_wrap.cpp
LOCAL_STATIC_LIBRARIES := gdal
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := gdalconstjni
LOCAL_SRC_FILES := gdalconst_wrap.c
LOCAL_STATIC_LIBRARIES := gdal
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := ogrjni
LOCAL_SRC_FILES := ogr_wrap.cpp
LOCAL_STATIC_LIBRARIES := gdal
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := osrjni
LOCAL_SRC_FILES := osr_wrap.cpp
LOCAL_STATIC_LIBRARIES := gdal
include $(BUILD_SHARED_LIBRARY)

Aplication.mk

APP_STL := gnustl_shared
APP_CFLAGS := Android.mk
APP_ABI := x86
APP_PLATFORM := android-14

Тогда я использовал android-ndk-r16b в windows-x86_64, но я столкнулся с такими ошибками, как на картинке:

undefined reference ...

Было много "неопределенной ошибки ссылки", которую я не могу показать здесь.

Примечание : для создания gdal Java Binding я использовал swig и jdk7 на своей Ubuntu 16.04.

1 Ответ

0 голосов
/ 08 мая 2018

Когда вы собираете libgdal.a на вашем компьютере с Ubuntu, у вас должен быть sqlite3, который разрешает #include "sqlite3.h".

Этих включаемых файлов достаточно для статической библиотеки, но для создания libgdaljni.so вам также потребуется libsqlite3.a . Вы можете кросс-компилировать его для Android самостоятельно на той же машине с Ubuntu, но, вероятно, можно получить предварительно собранную библиотеку, например от https://github.com/couchbase/couchbase-lite-java-native/tree/master/vendor/sqlite/libs/android.

Скопируйте этот файл (для соответствующего ABI) в тот же каталог и измените ваш Android.mk соответственно:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := sqlite3
LOCAL_SRC_FILES := libsqlite3.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := gdal
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/gdal/include
LOCAL_SRC_FILES := libgdal.a
LOCAL_EXPORT_LDLIBS := -lz
LOCAL_STATIC_LIBRARIES := sqlite3
include $(PREBUILT_STATIC_LIBRARY)

*continued without changes*

Если у вас все еще есть «неопределенная ошибка ссылки», это может означать, что следует добавить некоторые другие библиотеки.

...