ndk-build undefined reference errror

房东的猫 提交于 2019-12-08 05:28:57

问题


I'm using ndk-build to build a set of shared library(.so) for my android project. I configured and made the source code of C++ library(gdal-2.2.2). everything was ok.("./configure & make & make install" was successful).

So i created my jni folder like this documentation.

but when I'm trying to use ndk-build on windows, I get a lot of error like "Undefined refrence to somthing".

I've spent a lot of time on this project. Is there someone to help me? Thanks.

Update

I used configure like this on 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++"

After make & make install step I created JNI. this is my directory.

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

Then I used android-ndk-r16b in windows-x86_64 but I faced with these errors like this picture:

There was a lot of "undefined reference error" that i can't show here.

Note: for making gdal Java Binding I used swig and jdk7 on my ubuntu 16.04.


回答1:


When you build libgdal.a on your ubuntu machine, you must have sqlite3, which resolves #include "sqlite3.h".

These include files are enough for a static library, but to create libgdaljni.so you also need libsqlite3.a. You can cross-compile it for Android it yourself on the same ubuntu machine, but it is probably OK to get prebuilt library e.g. from https://github.com/couchbase/couchbase-lite-java-native/tree/master/vendor/sqlite/libs/android.

Copy this file (for appropriate ABI) to the same directory, and modify your Android.mk accordingly:

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*

If you still have "undefined reference error", this could mean that some other libraries should be added.



来源:https://stackoverflow.com/questions/50155150/ndk-build-undefined-reference-errror

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!