0

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

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

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

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

4

1 回答 1

0

我假设以下内容:

  • 当您链接 c.so 时,您将在命令行上列出 a.so 和 b.so。
  • 当您在 c.so 上运行 ldd 时,您会看到 a.so 和 b.so。
  • 运行时,设置 -Djava.library.path 以包括包含所有三个的目录。
  • 运行时,不要设置 LD_LIBRARY_PATH 以包含包含所有三个的目录。

如果您将 LD_LIBRARY_PATH 环境变量设置为包含包含库的目录,您将获得所需的结果。

有关更多解释和替代方法,请参阅https://github.com/bimargulies/jni-origin-testbed

于 2012-04-20T12:08:17.553 回答