我正在使用JNA和Java,但我认为这个问题会影响任何本地到外部的桥。搜索路径,其中一个本地库依赖于另一个本地库
我有一个依赖于lib1.dylib的Java应用程序,而lib1.dylib依赖于lib2.dylib。
我想把我的.app文件放在Mac里面。我可以很容易地将lib1.dylib放在里面,并设置java.classpath(或NativeLibrary.addSearchPath())来告诉JVM在哪里找到lib1.dylib。麻烦的是,我不知道如何通知lib1.dylib的依赖关系也在我提供的位置。结果是lib1加载正常,但是因为lib2不在操作系统的库路径中,所以找不到lib2。
任何人都知道我能克服这个问题吗?我认为它必须在大量共享库的大型项目中大量出现。
谢谢!我会检查出来的。对不起,我的问题中混淆了classpath和java库路径。 (1)或(2)可能值得丢失便携性。我试图避免(3),因为它使安装程序非常复杂,需要root访问权限,覆盖其他应用程序需要的现有旧版本库的风险等。 - - – 2010-03-24 23:04:13
调查完这些选项之后,只有坏消息。 (1)不适用于JNA。显然,JNA并不关心Java是否曾经加载过这个库,大概是因为它必须自己做映射的东西。但它会与JNI一起工作。(2)需要针对不同操作系统的特殊代码,但最大的问题是,在UNIX中没有与dllmain等价的东西,并且没有特别的保证(我知道)在依赖查找完成之前将执行cwd开关。 我看不出(3),我试图避免这个问题。游民。 – 2010-03-25 03:34:31