我用 C 语言编写了一些我想从 Java 调用的代码。我所做的是我的 c 代码中有一个函数,它从 libspotify 调用另一个 c 函数,我正在尝试使用 JNA 编写一个 Java Wrapper 来调用我的 c 函数。
我在 c 中为 spotify 编写了一个简单的登录函数,它实际上可以工作。这是具有该方法的c文件的链接
https://github.com/shroffrushabh/libspotify_java/blob/master/jukebox.c
我遵循的下一步是,我没有使用 libspotify 示例中提供的 make 文件,而是使用以下 cmd 编译并创建一个 .so 文件
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 库。如果你能给我一些关于如何解决这个问题的建议,那就太好了