【问题标题】:How to generate .a to .so如何生成 .a 到 .so
【发布时间】:2016-05-25 00:43:15
【问题描述】:

我拥有许多 .a 文件,并希望使用 ndk-build 生成 .so。

Android.mk

LOCAL_PATH  := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := nonfree
LOCAL_MODULE += opencv_java3

LOCAL_SRC_FILES :=              \
    libopencv_aruco.a           \
    libopencv_bgsegm.a                  \
    libopencv_bioinspired.a     \
    libopencv_calib3d.a     \
    libopencv_ccalib.a     \
    libopencv_core.a     \
    libopencv_datasets.a     \
    libopencv_dnn.a     \
    libopencv_dpm.a     \
    libopencv_face.a     \
    libopencv_features2d.a     \
    libopencv_flann.a     \
    libopencv_fuzzy.a     \
    libopencv_highgui.a    \
    libopencv_imgcodecs.a    \
    libopencv_imgproc.a    \
    libopencv_line_descriptor.a    \
    libopencv_ml.a    \
    libopencv_objdetect.a    \
    libopencv_optflow.a    \
    libopencv_photo.a    \
    libopencv_plot.a    \
    libopencv_reg.a    \
    libopencv_rgbd.a    \
    libopencv_saliency.a    \
    libopencv_shape.a    \
    libopencv_stereo.a    \
    libopencv_stitching.a    \
    libopencv_structured_light.a    \
    libopencv_superres.a    \
    libopencv_surface_matching.a    \
    libopencv_text.a    \
    libopencv_tracking.a    \
    libopencv_ts.a    \
    libopencv_video.a    \
    libopencv_videoio.a    \
    libopencv_videostab.a   \
    libopencv_xfeatures2d.a   \
    libopencv_ximgproc.a   \
    libopencv_xobjdetect.a   \
    libopencv_xphoto.a

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_STATIC_LIBRARY)

要使用 NDK 构建,请使用这些 steps

当试图生成 .so 这返回我这个错误:

C:\Android\sdk\ndk-bundle\build\ndk-build.cmd 清理 Android NDK: jni/Android.mk 中的 LOCAL_MODULE 定义不能包含空格
C:/Android/sdk/ndk-bundle/build//../build/core/build-shared-library.mk:23: *** Android NDK:请更正错误。中止。停下来。

进程以退出代码 2 结束

【问题讨论】:

  • 如果您要构建共享库,为什么要使用PREBUILT_STATIC_LIBRARY
  • 糟糕,我的错误...我更改为 SHARED 但仍然对如何使用 contrib 生成 lib opencv 3.1 以使用 SURF 有疑问。我一步一步地跟着 github 用 cmak 命令生成了这个巨大的列表“.a”,并想加入一个“.so”。我不知道是否有更简单和正确的使用 contrib SURF 生成这个库。

标签: android c++ android-ndk


【解决方案1】:

LOCAL_MODULE 指定最终构建的 .so 文件的名称。 由于 space is introduced in the name when you concatenate the two strings nonfreeopencv_java3 导致 ndk-build 出现错误:

LOCAL_MODULE := nonfree
LOCAL_MODULE += opencv_java3

如果您想要一个串联的名称,我建议您手动执行此操作:

LOCAL_MODULE := nonfree_opencv_java3

然后,您需要在通过 JNI 加载 .so 文件时指定此名称。

【讨论】:

  • 感谢回复...我收到此错误:C:\Android\sdk\ndk-bundle\build\ndk-build.cmd clean C:/Android/sdk/ndk-bundle/build //../build/core/prebuilt-library.mk:28: *** 缺少分隔符。停止。 Android NDK:错误:jni/Android.mk:nonfree_opencv_java3:预建库的 LOCAL_SRC_FILES 应仅包含一项 Process finished with exit code 2
猜你喜欢
  • 2013-12-14
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
相关资源
最近更新 更多