我正在尝试为 libfaad2 编写 jna 映射。该库使用 mp4ff 来解析 mp4 文件。mp4ff 在 windows 上编译为 libmp4ff.lib,在 linux 上编译为 libmp4ff.a。JNA 仅查找 .dll/.so 文件。那么如何将这个 mp4ff 加载到 jna 中呢?
编辑
我认为这个问题有答案。我讨厌 AAC,我花了 4 天时间用 ffmpeg 调试无效的内存访问,现在 libfaad 使用了一些奇怪的库。:(
我认为你是对的,这里的答案是相关的。在 UNIX 类型的系统上,.a
文件是一种特殊类型的存档,包含一个只能静态链接到应用程序的库(听起来.lib
文件在 Windows 上是一样的)。这意味着无法在运行时加载该库,因为您将需要一个动态库。但是要知道,这不是 JNA 的限制,而是大多数操作系统工作方式的一般限制。
静态库成为生成的可执行文件(或库)的“一部分”,而动态库可以在运行时加载。每种都有优点和缺点(例如,静态库通过不依赖其他库的存在和正确版本使应用程序更加自给自足,但动态库可以节省磁盘和内存空间以及单个如果有安全或其他错误修复补丁,文件要更新)。我见过的大多数软件都可以编译为静态或动态(共享)库,所以如果你在某处找不到你正在寻找的东西(或自己编译),我会感到惊讶。