编写JNI程序遇到的问题

最近跟随IBM developerwork 中一篇名为 “Java programming with JNI” 的教程做了一个例子, 过程中遇到了几个问题, 解决以后将注意事项列出来,以供以后查找。


1. Java代码中的System.loadLibrary(libName), 这行代码是用来加载c的动态库(on windows, dynamic-link)或者共享库(on linux, shared object     files)文件的,但是在linux       平台上这个方法的参数是有讲究的,在linux上c共享库命名规则是;lib***, 前缀是"lib".举个例子如果在文件系统中有个
    共享库命名为:libtest.so, 那么加载语句应该是这样的:System.loadLibrary("test").

2. -shared 参数,该参数告诉gcc要生成动态链接库,如果没有指定,生成的SO文件是个可执行文件,其它程序也无法链接它。
    -fPIC 参数,PIC(Position Independent Code) 因为是动态链接库,并不属于某个程序,是安放在内存中的,所以其地址必须用相对地址(不太明白原因)
    这个参数就是告诉编译器使用相对地址的。

3. 运行时必须将生成的动态链接库(.so)文件放入环境变量:LD_LIBRARY_PATH中,这样程序在载入的时候才能找到。

4. -L 参数, 该参数指明了动态链接库的路径,是个文件夹路径。

    -l 参数,指明了动态链接库的名称,比如:-ljvm, 在文件系统中应该有一个叫做libjvm.so的动态库。

5. ldd命令, 查看可执行文件中动态链接库的信息。

最后将这篇教程的地址贴出: http://www.ibm.com/developerworks/java/tutorials/j-jni/index.html


你可能感兴趣的:(windows,linux,jni,IBM,library,编译器)