2024 Clojure状态调查中分享您的想法!

欢迎!有关如何使用此服务的一些更多信息,请参阅关于页面。

0
Java互操作

嗨,我在尝试使用JNA(在Windows平台上的vscode中)调用C库时遇到了问题。

我从以下位置获取了ffmpeg共享库的副本:https://www.gyan.dev/ffmpeg/builds/
具体是:https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full-shared.7z

我将bin子目录的内容复制到了clojure项目的"lib"目录中。我还将该目录添加到了我的路径中,并且可以愉快地调用ffmpeg应用程序。

以下是我的deps.edn的内容

{:deps
 {net.java.dev.jna/jna   {:mvn/version "5.6.0"}}
 :paths ["src" "lib"]
 }

以下是代码

 (ns jnatest)

(import (com.sun.jna  Native Pointer))

(gen-interface
 :name jna.lib_avformat
 :extends [com.sun.jna.Library]
 :methods [[avformat_alloc_context [] Pointer]])

(def avformat
  (Native/loadLibrary "avformat-58" jna.lib_avformat))

在调用Native/loadLibrary时,我遇到了错误

; 执行错误(UnsatisfiedLinkError)在com.sun.jna.Native/open (Native.java:-2)。
; %1不是一个有效的Win32应用程序。

我最初从techascent jna实现开始,https://clojars.org/techascent/tech.jna,并遇到了类似的问题,所以我回到了基础知识。

我猜问题是出在库上,但在开始重新编译所有的ffmpeg库之前,我想请问是否有简单的方法可以尝试。

任何提示都受欢迎。

3个答案

0

这可能不是库本身的问题,而是调用方法有问题。遗憾的是,我对原生内容的了解不够以致不能提出调试建议。也许您可以首先尝试在Java中使用Clojure之外的库来使它工作。

0

我不能对原生库的使用发表评论,但如果包装器可以满足你的需求,我曾在Clojure项目中成功使用了https://github.com/a-schild/jave2来驱动ffmpeg可执行文件。

还有其他方法可以直接从Clojure包装ffmpeg可执行文件,但这对我并没有帮助,但我还是谢谢你的提示。我可能最终会选用其中之一,但我想先尝试直接访问库。另一种选择是使用org.byte.deco的ffmpeg包装器,但我想减少依赖项数量。
0
...