构建多个共享库
问题描述:
嗨我有一个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。
是的,Idd给了我a.so和b.so,并且我确实设置了LD_LIBRARY_PATH以包含所有3个库。我仍然得到不满意的错误,我不明白为什么... – user1197891 2012-04-20 12:33:57
您的下一个端口是LD_DEBUG环境变量。 – bmargulies 2012-04-20 13:34:43
请修改您的问题以包含异常错误消息的全文。您确实将LD_LIBRARY_PATH设置为包含文件的*目录*,而不是单个文件路径名,对吗? – bmargulies 2012-04-20 13:35:31