通过cygwin连接第三方库编译a文件

2016年05月05日 其他资源 暂无评论 阅读725次

通过cygwin连接第三方库编译a文件

一个模拟Linux的cygwin,我们可以用此来编译原始代码(c或cpp)得到静态链接库a文件,或动态链接库so文件

单独模块用cygwin编译成静态链接库a文件

  1. 创建一个目录singlelib

  2. 在singlelib下创建src和jni两个目录

  3. src中放入源码文件。

    我这里用hello.c代替简要说明问题。

src/src/hello.c

 #include <stdio.h>
    #include "../include/hello.h"
    int hello(const char *name) {
        printf("hello");
        return 1;
    } 

src/include/hello.h

 #ifndef __INCLUDE_HELLO_H__
    #define __INCLUDE_HELLO_H__
    #ifdef  __cplusplus
    extern "C" {
    #endif
    int hello(const char *name);
    #ifdef  __cplusplus
    }
    #endif
    #endif // end __INCLUDE_HELLO_H__ 
  1. jni目录下Android.mk的内容

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := hello
    LOCAL_SRC_FILES := ../src/src/hello.c
    LOCAL_INCLUDES := $(LOCAL_PATH)/jni
    include $(BUILD_STATIC_LIBRARY) 
  2. jni目录下Application.mk的内容

    APP_MODULE := hello
    APP_BUILD_SCRIPT := ./jni/Android.mk
    APP_ABI := armeabi-v7a arm64-v8a
    #APP_PLATFORM := android-10 
  3. cygwin窗口中cd到singlelib下使用ndk-build目录

  4. 在singlelib下的obj中可看到生成的a文件

引用其他第三方a文件用cygwin编译成新的静态a文件

前面几个步骤和单模块编译一样,发生变化的只有jni/Android.mk文件 下面是jni/Android.mk文件的内容

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := referlib
LOCAL_SRC_FILES := ../import_lib/$(TARGET_ARCH_ABI)/libhello.a
LOCAL_EXPORT_C_INCLUDES := ../import_lib_include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello2
LOCAL_SRC_FILES := ../src/src/hello2.c
LOCAL_STATIC_LIBRARIES := referlib
include $(BUILD_STATIC_LIBRARY) 

把上面mk文件中最后一行改为下面这样则可以生成动态链接库得到so文件

include $(BUILD_SHARED_LIBRARY) 

另外,要说明的是,第二种情况下,所引用的第三方静态a文件没不用加入到编译的目录里面,所以真正用的时候,还是要把新编译出来的a文件和引用的第三方a文件一起使用才可以。


分享本文至:

WRITTEN BY

avatar
本文标签:cygwin
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

欢迎留言




用户登录

sitemap