我有一些Java代码包装现有的本机应用程序并执行以下操作:
步骤2中的本机应用程序需要一些动态库。因此,在运行配置下 - >环境我已设置以下变量来引用库。
DYLD_LIBRARY_PATH = ${project_loc}/path/to/libs
DYLD_FALLBACK_LIBRARY_PATH = ${project_loc}/path/to/libs
到目前为止一切正常。现在我将我的代码和现有的本机应用程序打包为Eclipse插件。每当我尝试在插件中运行代码时,我都会收到以下错误:
dyld: Library not loaded: libsrcml.dylib
Referenced from: workspace/Project/src/nativeApp
Reason: image not found
根据我的理解,这是因为我之前设置的环境变量引用了{$ project_loc},这是我的Eclipse项目的存储位置。现在,我的代码不再包含在该项目中,但它包含在插件中,因此变量的路径不再有效。问题是,如何设置引用插件中文件夹的路径?或者,是否有可能以某种方式在Java代码中动态加载这些变量?
答案 0 :(得分:0)
path variables用于指定文件系统中的固定位置。
要识别插件中的资源,我会使用其URL
案例1 :Bundle bundle = Platform.getBundle("your.bundle.id");
URL url = bundle.getEntry("yourDir/yourFile.txt");
File f = new File(FileLocator.resolve(url).toURI());
url = new URL("platform:/plugin/your.bundle.id/yourDir/yourFile.txt");
File f = new File(FileLocator.resolve(url).toURI());
案例2 :资源的平台网址:
System.loadLibrary("libname")
感谢Vogella提示。
但是,对于插件中的库来说有点不同,因为Eclipse-BundleShape: dir
必须能够解析你的lib。
如果您在插件中发布并使用本机库,请将您的插件打包为目录,而不是压缩的jar文件。 因此,请编辑插件的MANIFEST.MF并设置Eclipse-BundleShape: dir
System.getProperty("user.dir");
然后,您的插件将打包为一个文件夹,然后您有责任使您的Native库进行交互。通常这取决于本机库如何相互链接,以及Java-to-native框架如何设置搜索路径。
我的简单解决方案将所有本机库放到Eclipse可执行文件的根文件夹中,这是Java执行目录,这样我就可以使用"用户获取该路径.DIR"环境变量如下:
{{1}}
然后,当所有本机都在同一个文件夹中时,它们可以毫无问题地相互引用。
请还查看这些资源: