运行Cross编译的C app,它使用Android设备的共享库

时间:2016-07-25 15:24:45

标签: android c gcc makefile shared-libraries

我找不到以下的实例:

我创建了由以下代码组成的共享库:

foo.c的:     #include

#include "foo.h"

void foo(void)
{
    printf("Hello, I'm a shared library\n");
}

和foo.h是界面:

#ifndef __FOO_H__
#define __FOO_H__

void foo(void);

#endif

“foo”代码位于子目录foo

使用编译(为了简单起见,我将删除详细的make选项):

#CROSS_COMPILE is:
#/usr/local/toolchain/arm-2010q1/bin/arm-none-linux-gnueabi-
CC := $(CROSS_COMPILE)gcc 
$(CC) -fPIC -c foo.c -o foo.o
$(CC) -shared -o libfoo.so foo.o

构建它时 - libfoo.so成功创建。

main.c文件:

#include <stdio.h>

#include "foo.h"

int main(void)
{
    printf("Hello World\n");
    foo();
    return 0;
}

使用以下方式构建应用程序:

$(CC) -c main.c -o main.o
$(CC) main.o -Lfoo -lfoo -o test

到目前为止 - 所有的确定我得到了可执行文件并将其推送到/ data / local / tmp /.

现在,我尝试了以下所有内容但没有成功(得到错误:测试:没有这样的文件或目录)

  1. adb push libfoo.so to / system / lib或/ system / lib64
  2. 复制到/ data / local / tmp /并相应地设置LD_LIBRARY_PATH
  3. 有人有建议吗?

1 个答案:

答案 0 :(得分:0)

经过深入挖掘后,我发现更好的方法是使用NDK而不是标准的Makefile来实现此目的。

可以在http://web.guohuiwang.com/technical-notes/androidndk1找到帮助我实现目标的综合教程。

祝你好运