大家好,我是一个新手,最近一个项目需要在linux下使用到jni,简单的说就是在一个java程序里加载一个自己写的.so文件,而问题在于这个.so文件又需要调用其它动态库。具体是这样的,比如这里有一个test.c文件,我们要使用它,需要一个静态库lib***.a(test.c里要调用该静态库的方法),3个动态库,-lcap,-lpthread,-lz(系统有的),按如下方式编译gcc -o out test.c -L. -lcap -lpthread -lz,最后可执行文件out可以顺利运行。
现在我们需要一个java程序能够实现相同功能,比如写了一个test.java,使用jni生成了.h头文件,然后我们自己实现一个c程序,这个c程序会调用上面提到的lib***.a里的函数,我们初步的想法是把该c程序编译成.o文件,然后把lib***.a静态库全部解压出.o文件,在一起生成.so文件,但是另外3个动态库怎么处理呢?可能说得不是很清楚,呵呵,望高手指点,十万火急!

解决方案 »

  1.   

    静态库lib***.so 怎么就不清楚, 但是链接的动态库应该是要放同一目录吧.http://lveyo.javaeye.com/blog/240578
    希望这个文章对你有帮助了.
      

  2.   

    谢谢楼上回复,因为jni最终是需要生成一个.so给java程序使用的,目前的问题是在生成这个.so文件的时候另外3个动态库应该怎么办?放到同一个目录下也没什么用,因为它们都在系统默认的搜索路径中(/lib,/usr/lib)下,所以使用-lcap等就可以直接找到了!
      

  3.   

    只要这四个动态连接库(系统的三个和你生成的一个)可以被load进来就可以了,可以通过设置环境变量来实现。
    LD_LIBRARY_PATH