您的位置:首页 > 编程语言 > C语言/C++

mac os x 将C文件编译成.so库

2016-12-14 21:11 281 查看
应用背景

将C语言写好的代码提供给unity调用,项目要在Android手机上运行,所以要将C代码编译成.so库。因为要用到opencv对图像操作,这里把opencvsdk也放进去了。

步骤:

1、下载安装Android studio(其实也可以不下载,楼主为了省事,直接安装Android studio,目的还是为了安装ndk,sdk);

2、配置文件

2.1 jni文件及路径(jni文件下载路径:http://download.csdn.net/detail/boy313918205/9724639)

jni路径:/Users/xlsj/Desktop/dalaofei/MarkerLessARAndroid/jni



2.2 NDK路径:/Users/xlsj/Desktop/dalaofei/NingBoSubway/android-ndk-r10b

这里使用NDK是:android-ndk64-r10b-darwin-x86_64.tar



2.3 opencv sdk路径:/Users/xlsj/Desktop/dalaofei/OpenCV-2.4.9-android-sdk
这里下载使用的opencv是OpenCV-2.4.9-android-sdk。



一下是jni文件中的文件及代码,在步骤2中下载的jni文件中已经包含。

3、Android.mk文件中代码:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

MAIN_DIR:=$(LOCAL_PATH)

OPENCV_LIB_TYPE:=STATIC

ifeq ("$(wildcard $(OPENCV_MK_PATH))","")  

#try to load OpenCV.mk from default install location  
include /Users/xlsj/Desktop/dalaofei/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk

else  

include $(OPENCV_MK_PATH)  

endif 

LOCAL_PATH:=$(MAIN_DIR)

LOCAL_MODULE:=OpenCV

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)

OpenCV_CAMERA_MODULES:=on

OpenCV_INSTALL_MODULES:=off

OpenCV_LIB_TYPE:=STATIC

include /Users/xlsj/Desktop/dalaofei/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := MarkerLessARAndroid

LOCAL_C_INCLUDES += $(LOCAL_PATH)

LOCAL_SRC_FILES := $(LOCAL_PATH)/ARMarkerLessAndroid.cpp

LOCAL_SHARED_LIBRARIES+=OpenCV

LOCAL_LDLIBS += -llog -ldl -DNDEBUG

LOCAL_LDFLAGS += -pthread -fopenmp 

LOCAL_CFLAGS += -DNDEBUG -O1 -O2 -O3 -Os -Ofast -ffunction-sections -fdata-sections -mfloat-abi=softfp -mfpu=neon

LOCAL_CPPFLAGS := -std=c++11 -pthread -frtti -fexceptions -DNDEBUG -O1 -O2 -O3 -Os -Ofast -ffunction-sections -fdata-sections -mfloat-abi=softfp -mfpu=neon -fopenmp

LOCAL_ARM_NEON := true

LOCAL_ARM_MODE := arm

include $(BUILD_SHARED_LIBRARY)

4、
Application.mk文件中代码:

APP_STL := gnustl_static

APP_CPPFLAGS := -frtti -fexceptions -mfloat-abi=softfp -mfpu=neon -std=gnu++0x -Wno-deprecated \

-ftree-vectorize -ffast-math -fsingle-precision-constant --std=c++11

NDK_TOOLCHAIN_VERSION := 4.9

APP_CFLAGS := --std=c++11

APP_ABI :=armeabi-v7a

APP_OPTIM := release

APP_SHORT_COMMANDS      := true

APP_PLATFORM := android-19

5、

build.sh中代码:

#!/bin/bash

# To build a new jni .so

# and copy the file to where it should stay

FILENAME="libMarkerARAndroid.so"

PROJECT_PATH=$(dirname $(cd $(dirname ${BASH_SOURCE[0]} ); pwd ) )

DEST_PATH="/Users/xlsj/Desktop/dalaofei/MarkerLessARAndroid/jni"

NDK_PATH="/Users/xlsj/Desktop/dalaofei/NingBoSubway/android-ndk-r10b"

if [ $(basename $(pwd) ) !="jni" ];then

  export NDK_PROJECT_PATH=$PROJECT_PATH

fi

${NDK_PATH}/ndk-build

if [ ! -e ${PROJECT_PATH}/libs/armeabi-v7a/${FILENAME} ];then

  echo" Compile process failed, no .so file. "

  echo"--------------------------------------"

else

  echo" Has compiled. "

  echo"---------------"

  if [ -e ${DEST_PATH}/armeabi-v7a/${FILENAME} ];then

    rm --preserve ${DEST_PATH}/armeabi-v7a/${FILENAME}

echo" The old jni .so has been deleted. "

echo"-------------------------------"

  fi

  cp ${PROJECT_PATH}/libs/armeabi-v7a/${FILENAME} ${DEST_PATH}/armeabi-v7a/${FILENAME}

fi

#${NDK_PATH}/ndk-build clean

echo" Has done and cleaned."

:<<!EOF!

!EOF!

以上代码中有opencv,ndk等路径需要修改

6 在终端中运行build.sh
在苹果主界面菜单按顺序:前往——>实用工具——>终端;
在终端中输入build.sh路劲并运行。
如图:



运行结果,jni同级目录中生产“libs”和“obj”文件。



将运行文件

中的.so文件拷贝中unity中便可以实用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mac os x c语言 .so