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

欢迎!请参阅关于页面了解有关如何使用本网站的更多信息。

0
Java互操作

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

我从以下网址获取了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

可能不是库本身有问题,而是调用方式的问题。不幸的是,我对原生代码的了解不够,无法提出调试建议。也许您可以先尝试不加Clojure,只用Java使它工作。

0

我无法评论原生库的使用,但如果包裹器能满足您的需求,我已成功在Clojure项目中使用https://github.com/a-schild/jave2来运行ffmpeg可执行文件。

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