我已经用C语言编写了一些代码,我想从Java调用它。我所做的是在我的c代码中有一个函数,该函数从libspotify调用另一个c函数,并且我试图使用JNA编写Java包装程序来调用我的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
我不确定这里出了什么问题,但是这就是我的想法,我正在c代码中调用libspotify(spotify提供的C api)中的sp_session_create函数,所以我认为我需要某种方式尝试生成.so文件时,请链接libspotify库。如果您能给我一些有关如何解决此问题的建议,那就太好了
最佳答案
您需要在Spotify库中链接。
编译libspot.so时应这样做。这可以通过以下方式完成:
-L/path/to/spotify/library
这应该是
something/libspotify/lib,
,并且可能是您构建libspot.so
的目录。您可能还需要指定:-I/path/to/spotify/includes