请高手帮下忙,帮忙分析下原因错误是java.lang.UnsatisfiedLinkError: 动态库 : 动态库:only ET_DYN and ET_EXEC can be loaded献上高分等待高手的回答

解决方案 »

  1.   

    http://bbs.chinaunix.net/viewthread.php?tid=805072http://chen2337.blog.163.com/blog/static/3403992020076275576227/,原因是因为没有设置LD_LIBRARY_PATH,在shell环境中执行export LD_LIBRARY_PATH=/home/JNI,上述问题就迎刃而解。core java 2一书中的编译环境是在solaris下,所以环境变量的设置不同。
      

  2.   

    这个帖子我也看过好长时间,也这样去尝试过
    最后发现一个问题,就是用户的环境不可能每次都让我们手动的去设置一个环境变量
    所以我们使用的过程中就用System.load()直接去加载所在的动态库,加载的动态库是通过copy工程的动态库到本地,所以就没有必要去设置那个环境变量,而且这样在windows地下,还有redhit64位地下都通过了
    由于要测试的环境比较多,编译的so就比较多了点,最后发现编译的so在redhit32位跟suse 64 ,suse 32上运行都报上面的错误,太郁闷了所以请高手帮忙解释下这个错误是什么意思
      

  3.   

    唉。没玩过Linux。。有空一定装个玩玩去。
      

  4.   


    不用每次手动设置,可以在.profile或者.bash_profile中设置export LD_LIBRARY_PATH=/home/JNI
    最好是在不同的服务器上全部本地编译,而不是一次编译到处copy.
      

  5.   

    export LD_LIBRARY_PATH=/java_home/lib
      

  6.   

    或者你在运行的时候把相应的dll加入classpath中去看看
      

  7.   

    通过变量不行的话,那么修改下系统文件配置下,看看行不行
    /etc/ld.so.conf
      

  8.   

    问题解决了,
    是一个很低级的错误导致花了两天时间去解决他解决方法是将打包过程中g++ -fpic -I/usr/java/jdk1.6.0_19/include/ -I/usr/java/jdk1.6.0_19/include/linux/ -shared -o libkeyboard_encrypt_64.so -c keyboard_encrypt.c 修改成为了g++ -fpic -I/usr/java/jdk1.6.0_19/include/ -I/usr/java/jdk1.6.0_19/include/linux/ -shared -o libkeyboard_encrypt_64.so keyboard_encrypt.c 唉,真是头痛,还得我重装了四个系统,现在打包四个系统中均能够使用希望大家以后不要犯这种低级错误给分大家