ndk-build 未定义引用错误
ndk-build undefined reference errror
我正在使用 ndk-build 为我的 android 项目构建一组共享库 (.so)。我配置并制作了C++库的源代码(gdal-2.2.2)。
一切正常。("./configure & make & make install" 成功)。
所以我像这样创建了我的 jni 文件夹 documentation。
但是当我尝试在 windows 上使用 ndk-build 时,我收到很多错误,例如 "Undefined refrence to somthing"。
我在这个项目上花了很多时间。有人可以帮助我吗?
谢谢。
更新
我在 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 install 步骤 之后,我创建了 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
然后我在 windows-x86_64 中使用了 android-ndk-r16b 但我遇到了如下图所示的错误:
有很多"undefined reference error"我不能在这里展示。
注意:为了制作 gdal Java 绑定,我在 ubuntu 16.04.
上使用了 swig 和 jdk7
当您在 ubuntu 机器上构建 libgdal.a 时,您必须有解析 #include "sqlite3.h"
的 sqlite3。
这些包含文件对于静态库来说已经足够了,但是要创建 libgdaljni.so 你还需要 libsqlite3.a.您可以在同一台 ubuntu 机器上自己为 Android 交叉编译它,但是获取预构建的库可能没问题,例如来自 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*
如果您还有 "undefined reference error",这可能意味着应该添加一些其他库。
我正在使用 ndk-build 为我的 android 项目构建一组共享库 (.so)。我配置并制作了C++库的源代码(gdal-2.2.2)。 一切正常。("./configure & make & make install" 成功)。
所以我像这样创建了我的 jni 文件夹 documentation。
但是当我尝试在 windows 上使用 ndk-build 时,我收到很多错误,例如 "Undefined refrence to somthing"。
我在这个项目上花了很多时间。有人可以帮助我吗? 谢谢。
更新
我在 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 install 步骤 之后,我创建了 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
然后我在 windows-x86_64 中使用了 android-ndk-r16b 但我遇到了如下图所示的错误:
有很多"undefined reference error"我不能在这里展示。
注意:为了制作 gdal Java 绑定,我在 ubuntu 16.04.
上使用了 swig 和 jdk7当您在 ubuntu 机器上构建 libgdal.a 时,您必须有解析 #include "sqlite3.h"
的 sqlite3。
这些包含文件对于静态库来说已经足够了,但是要创建 libgdaljni.so 你还需要 libsqlite3.a.您可以在同一台 ubuntu 机器上自己为 Android 交叉编译它,但是获取预构建的库可能没问题,例如来自 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*
如果您还有 "undefined reference error",这可能意味着应该添加一些其他库。