Java JNI接口:本机函数相对文件路径

时间:2014-12-30 00:48:59

标签: java c java-native-interface

我遇到了本机函数使用的相对文件路径问题。当我从Java代码调用本机C函数时,由于空文件指针而导致分段错误。唯一有效的方法是将这些路径更改为绝对文件路径,这对我来说不是解决方案。有没有办法为本机函数设置根目录或使用Java项目根文件夹浏览目录,或绝对路径是唯一的方法?

3 个答案:

答案 0 :(得分:1)

Java does not have a way to change the working directory

这是因为the Java developers consider changing the working directory to create more problems than it solves。具体是:

  • 这将是全球可变状态。全局可变状态使得将应用程序的各个部分彼此隔离变得更加困难。
  • 这将是竞争条件(全球可变状态的另一个副作用)。
  • 它没有显着的好处。您可以通过更改当前目录来执行的所有操作,您已经可以使用绝对路径。

您的C代码需要使用绝对路径。

或者,如果您愿意编写其他C代码,您的C代码可以直接调用操作系统的chdir函数。这可能很危险,因为JVM不是为这种可能性而设计的。

答案 1 :(得分:0)

我解决了这个问题!解决方案是使用File.getAbsoluteFilePath()函数,并将其传递给本机C函数。它也可以用于查找共享库的绝对路径,使应用程序平台独立。 C代码可以像在绑定Java代码之前一样浏览它的目录。

答案 2 :(得分:-1)

你在Linux工作吗? 在Linux中,您可以添加路径 $LD_LIBRARY_PATH=.so file path~/.bashrc文件,然后重新启动..

如果您使用Windows,则可以将.dll文件放在作为.class文件路径的路径中。