我有一个模块ModuleA,放置在external文件夹下,它会被编译成的shared_library。然后,在framework内的某些文件会调用他的一些接口。
      首先,我 完全编译整个工程。编译完成后,可以在out/target/product/generic/obj/SHARED_LIBRARIES文件夹下,找到libModuleA.so这个文件。
     然后,我就将这个so文件放到了external/ModuleA这个文件夹下(对这个文件所需要放置的位置,我没有要求。如果为了完成最后的调用,可以允许他放在其他任何地方)。
    我的目的是:
      我想将external/ModuleA中,所有的c文件去除,然后让frameworks/base/core/jni/android/graphics中的某些cpp文件可以直接调用我生成的so文件里的api。我需要将ModuleA这个东西发给别人,但是我不想给他源代码。所以,我想将我的ModuleA变成so文件,供别人使用。
   我遇到的问题:
    我尝试 将ModuleA里的android.mk修改,LOCAL_SRC_FILES:= libModuleA.so,然后文件结束的地方使用#include $(PREBUILT_SHARED_LIBRARY) 。 但是在其他文件调用这个库内的函数时,编译报错( error: undefined reference to 'xxxxxx'
)。我该如何做,才能使android能正常完成编译,并被android里的函数正常调用?

解决方案 »

  1.   

    LOCAL_LDLIBS 用这个方式加载你的库只要路径对,应该没有问题的,你试试
      

  2.   

    我用cygwin编译时候是用这个可以的
      

  3.   

    我觉得你在尝试的方案像是在掩耳盗铃,C代码文件都没有了,要Android.mk干什么? 
    LOCAL_SRC_FILES:= libModuleA.so这个是源文件,那目标文件又是什么?所以,你的问题是有一个.so文件,怎么提供给别人调用。
    方向很重要。
      

  4.   

    可以请教一下,具体怎么使用吗?在对so文件内的函数接口进行调用cpp文件里需要做什么改动吗?看网上说,在java里,一般要用system.loadlibrary()。我是菜鸟,对这些不太了解。谢谢
      

  5.   

    1. 你的so最后放在什么位置?
    2. 如果你的so不在系统库路径下,其它模块在mk里指定了库的路径了吗?
    2. 其它模块在mk里用LOCAL_LDLIBS 指定了你的库了吗?LOCAL_LDLIBS += /your_path/libModuleA.so试试,或者你说可以把你的libModuleA.so放在/system/lib下:LOCAL_LDLIBS += -lModuleA希望对你有所帮助
      

  6.   

    请问 楼主问题解决了吗?是怎么处理的呢?我也编译出了一个SO,在另一个MODULE调用SO里的函数,那是编译不过,
    提示 undefined reference