我有一个模块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里的函数正常调用?
首先,我 完全编译整个工程。编译完成后,可以在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里的函数正常调用?
LOCAL_SRC_FILES:= libModuleA.so这个是源文件,那目标文件又是什么?所以,你的问题是有一个.so文件,怎么提供给别人调用。
方向很重要。
2. 如果你的so不在系统库路径下,其它模块在mk里指定了库的路径了吗?
2. 其它模块在mk里用LOCAL_LDLIBS 指定了你的库了吗?LOCAL_LDLIBS += /your_path/libModuleA.so试试,或者你说可以把你的libModuleA.so放在/system/lib下:LOCAL_LDLIBS += -lModuleA希望对你有所帮助
提示 undefined reference