【发布时间】:2016-04-25 05:45:13
【问题描述】:
我只是想制作一个玩具程序来将本机代码绑定到 java 只是为了好玩。 我已经成功能够使用System.load("/FULLPATH/mylib.so") 使程序运行,但是在使用System.loadLibrary() 专门从java.library.path 加载库时遇到问题。
我正在使用的工具:
- gcc 4.8.5 20150623(红帽 4.8.5-4)
- java/javac 版本“1.8.0_66”(HotSpot 64 位)
- CentOS 7(64 位)
构建顺序(第一段中提到的两个版本相同)。
rm TestIt.class mylib.so TestIt.h javac TestIt.java javah -stubs TestIt gcc -shared -I/$JDK8_HOME/include/ -I/$JDK8_HOME/include/linux/ -fPIC nativeTestItImpl.c -o mylib.so加载库的 Java 代码(只是一个静态初始化器):
静止的 { System.out.println("System.getProperty(\"java.library.path\") 是:" + System.getProperty("java.library.path")); System.loadLibrary("mylib"); //System.load("/FULLPATH/mylib.so");// ***这工作*** }我是如何尝试设置库路径的:
java -Djava.library.path=/FULLPATH TestIt java -Djava.library.path=/FULLPATH/mylib.so TestIt java -Djava.library.path=。 TestIt #appeared as '.' java -Djava.library.path=/FULLPATH:$PATH TestIt #NOTE: DEFLT_LIB_PATH 是上述打印语句的输出,当 # 运行“java TestIt” java -Djava.library.path=/FULLPATH:$DEFLT_LIB_PATH TestIt set LD_LIBRARY_PATH=/FULLPATH && java TestIt ##没有出现在lib的打印输出中 导出 LD_LIBRARY_PATH=/FULLPATH && java TestIt ##preppended /FULLPATH: 到 DEFLT_LIB_PATH所有版本都打印出来,预期的例外是上面标有“##”的版本。
所有情况下的错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no mylib in java.library.path
完整路径没有空格或特殊字符,所以我很困惑为什么会这样。
为了完整性,也尝试过System.loadLibrary("mylib.so");。
【问题讨论】:
标签: java c gcc shared-libraries