gpt4 book ai didi

java - 尝试使用 JNA 从 Java 调用 C 函数

转载 作者:行者123 更新时间:2023-11-30 15:40:12 25 4
gpt4 key购买 nike

我用 C 编写了一些代码,我想从 Java 调用它们。我所做的是我的 c 代码中有一个函数,它从 libspotify 调用另一个 c 函数,并且我正在尝试使用 JNA 编写一个 Java 包装器来调用我的 c 函数。

我用c语言为spotify编写了一个简单的登录函数,它实际上可以工作。这是具有该方法的 c 文件的链接

https://github.com/shroffrushabh/libspotify_java/blob/master/jukebox.c

我遵循的下一步是,我使用以下 cmd 来编译和创建 .so 文件,而不是使用 libspotify 示例中提供的 make 文件

gcc -o libspot.so -shared jukebox.c appkey.c

这就是我的 java 文件的样子

import com.sun.jna.Library;
import com.sun.jna.Native;

public class SpotifyTest {
public interface JukeBox extends Library {
public int login();
}
static public void main(String argv[]) {
JukeBox jk = (JukeBox) Native.loadLibrary("spot", JukeBox.class);
jk.login();
}
}

以下是编译并运行java文件的命令

javac -classpath jna-4.0.0.jar SpotifyTest.java
java -classpath jna-4.0.0.jar:. SpotifyTest

以下是我得到的异常:

java.lang.UnsatisfiedLinkError: /home/rushabh/libctest.so: undefined symbol: sp_session_create

我不确定这里出了什么问题,但这就是我的想法,libspotify(spotify提供的C api)中有一个sp_session_create函数,我在我的C代码中调用它,所以我想我当我尝试生成 .so 文件时,需要以某种方式链接 libspotify 库。如果您能给我一些关于如何解决这个问题的建议,那就太好了

最佳答案

您需要在 Spotify 库中链接。

这应该在编译 libspot.so 时完成。这可以通过以下方式完成:

-L/path/to/spotify/library

这应该是 something/libspotify/lib, 并且可能是您构建 libspot.so 的目录。您可能还需要指定:

-I/path/to/spotify/includes

关于java - 尝试使用 JNA 从 Java 调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com