最近在做项目中遇到这样的问题。
如下步骤:
1. 由C程序生成的SO库(libA.so)。
2. 再做一个so库(libB.so),里面程序会调用之前的so库(libA.so)的API函数。
3. Android做成NDK工程调用so库(libB.so)。
文件Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE  := BLOCAL_SRC_FILES :=  Jni.c \
        B.c LOCAL_C_INCLUDES := \
        $(JNI_H_INCLUDE)LOCAL_LDLIBS := -ldl -llog include $(BUILD_SHARED_LIBRARY)
文件B.c中使用dlopen调用库A的函数。
现在我的方法是用绝对路径来调用,即参数1:"/data/data/[proj name]/lib/libA.so"
想问的是,用相对路径应该怎么调用?我感觉是把当前Android工程的路径加到LD_LIBRARY_PATH这个环境变量里,可就是不知道怎么做。

解决方案 »

  1.   

    只能dlopen,android不支持LD_LIBRARY_PATH
      

  2.   

    那我想用相对路径该怎么调用呢?
    dlopen的第一个参数应该怎么写?
      

  3.   

    如果可以把liba生成成static_lib或者shared_lib,那么就可以在Static_LIB_PATH=libA或者SHARED_LIB_PATH=libA这种来编译了。
      

  4.   

    不太清楚怎么来添加环境变量,linux上确实是先搜索环境变量path中指定的路径,然后在搜索当前的路径
    或许可以采用折中的方法,通过调用api来查询current path,然后和相对路径组合成绝对路径来给
    dlopen使用
      

  5.   

    这到也行。现在我没什么好的办法,只有把要dlopen的库push到system/lib下,这样就能直接打开,不用写路径。
      

  6.   

    to guopeixin:
    想问下获取当前路径的api是什么函数?
      

  7.   

    getApplicationContext().getFilesDir().getAbsolutePath()
      

  8.   

    use "libhello.so" as  example.invoke the shared library like this:
    System.loadlibrary("hello");and the libhello.so should place in right folder.
      

  9.   

    你可以参考android 2.1 platform sourcecode ,PluginPackageAndroid.cpp中有dlopen这个函数的调用.
      

  10.   

    文件B.c中使用dlopen调用库A的函数。
    现在我的方法是用绝对路径来调用,即参数1:"/data/data/[proj name]/lib/libA.so"
    请问楼主的这一步在eclipse编译工程时,把libA.so放在了哪个目录,谢谢,急用