构建多个共享库

问题描述:

嗨我有一个Java程序,它必须调用一个本地程序,并且这个本地程序由两个如此的文件给出。所以我创建我的文件以便使用这个本地程序API来为我的Java程序做些事情。我试图将两个这样的文件与我创建的文件合并为一个文件,然后运行我的java程序。但是,它似乎失败了。更具体一点,这是我的例子。构建多个共享库

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

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

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

我假设如下:

  • 当您链接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

+0

是的,Idd给了我a.so和b.so,并且我确实设置了LD_LIBRARY_PATH以包含所有3个库。我仍然得到不满意的错误,我不明白为什么... – user1197891 2012-04-20 12:33:57

+0

您的下一个端口是LD_DEBUG环境变量。 – bmargulies 2012-04-20 13:34:43

+0

请修改您的问题以包含异常错误消息的全文。您确实将LD_LIBRARY_PATH设置为包含文件的*目录*,而不是单个文件路径名,对吗? – bmargulies 2012-04-20 13:35:31