JNA加载.a / .lib库

时间:2009-08-14 10:00:28

标签: java jna

我正在尝试为libfaad2编写jna映射。该库使用mp4ff来解析mp4文件。 mp4ff在windows上编译为libmp4ff.lib,在linux上编译为libmp4ff.a。 JNA只查找.dll / .so文件。那么如何将这个mp4ff加载到jna中?

修改

我认为this问题有答案。我讨厌AAC,我花了4天时间用ffmpeg调试无效的内存访问,现在libfaad使用了一些奇怪的库。 :(

1 个答案:

答案 0 :(得分:5)

我认为this中的答案与此相关是正确的。在UNIX类型的系统上,.a文件是一种特殊类型的存档,它包含一个只能静态链接到应用程序的库(听起来像.lib文件在Windows上是一样的)。这意味着无法在运行时加载该库,因为您需要一个动态库。但要知道这不是JNA的限制,它是大多数操作系统工作方式的一般限制。

静态库成为生成的可执行文件(或库)的“一部分”,而动态库可以在运行时加载。每个都有优点和缺点(例如,静态库通过不依赖于存在的其他库和正确的版本使应用程序更加自给自足,但动态库可以节省磁盘和内存上的空间以及单个如果有安全性或其他错误修复补丁,则更新文件)。我见过的大多数软件都可以编译为静态或动态(共享)库,所以如果你找不到你想要的东西(或者自己编译),我会感到惊讶。