Java 构建多个共享库

Java 构建多个共享库,java,java-native-interface,Java,Java Native Interface,嗨,我有一个java程序,它必须调用一个本机程序,这个本机程序由两个so文件给出。因此,我创建了So文件,以便使用本机程序API为我的java程序做一些事情。我试图将两个so文件与我创建的so文件合并为一个,然后运行我的java程序。然而,它似乎以这种方式失败了。更具体地说,这里是我的例子 我有一个java程序a,它必须调用一些本机代码。因此,我编写了一些本机代码,并将其构建为一个共享库(称为:C.so) 不幸的是,我编写的本机代码必须使用其他so文件中的其他代码。(A.so,B.so) 因此,

嗨,我有一个java程序,它必须调用一个本机程序,这个本机程序由两个so文件给出。因此,我创建了So文件,以便使用本机程序API为我的java程序做一些事情。我试图将两个so文件与我创建的so文件合并为一个,然后运行我的java程序。然而,它似乎以这种方式失败了。更具体地说,这里是我的例子

我有一个java程序a,它必须调用一些本机代码。因此,我编写了一些本机代码,并将其构建为一个共享库(称为:C.so)

不幸的是,我编写的本机代码必须使用其他so文件中的其他代码。(A.so,B.so)


因此,如何使用A.so和B.so编译我的so文件以使我的java程序工作,有什么想法吗?

我假设如下:

  • 链接c.so时,在命令行上列出a.so和b.so
  • 在c.so上运行ldd时,会看到a.so和b.so
  • 运行时,将-Djava.library.path设置为包含包含所有三个文件的目录
  • 运行时,不会将LD_LIBRARY_PATH设置为包括包含所有三个路径的目录
如果将LD_LIBRARY_PATH环境变量设置为包含包含库的目录,则将获得所需的结果


有关更多解释和替代方法,请参见。

是的,Idd为我提供了a.so和b.so,我确实将LD_LIBRARY_PATH设置为包含所有3个库。我仍然收到未满足的LinkError,我无法理解为什么…您的下一个调用端口是LD_DEBUG环境变量。请编辑您的问题以包含异常错误消息的全文。您确实将LD_LIBRARY_PATH设置为包含文件的目录,而不是单个文件路径名,对吗?