2014-01-14 33 views
0

我已经用C语言编写一些代码,我想从Java调用从Java调用的函数℃。我所做的是我有一个函数在我的c代码中调用另一个c函数从libspotify我试图写一个Java包装使用JNA调用我的c函数。试图使用JNA

我写了一个简单的登录功能,在C Spotify的这实际上是工作。下面是将c文件的链接,其具有的方法

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

下一步我之后,而不是使用在libspotify实施例中提供的补充文件,我使用了以下cmd以编译和创建。因此文件

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(); 
    } 
} 

以下是编译和运行JA的命令VA文件

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一个sp_session_create功能( C API),我正在调用我的C代码,所以我想我需要以某种方式链接libspotify库,当我试图生成我的.so文件。这将是巨大的,如果你能给我如何解决这个问题

回答

-1

后第2天研究这个的是我得到了它的工作,下面是我用来生成.so文件的命令。

gcc -L~/Downloads/libspotify-12.1.51-Linux-i686-release/lib -shared appkey.c jukebox.c -lspotify -o libspot.so 

执行到Java文件的其余步骤与上面相同。

谢谢埃里克·罗伯逊和Petesh您的帮助:)

2

您需要在Spotify的库链接一些建议。

这应该当你编译libspot.so来完成。这是可以做到的:

-L/path/to/spotify/library 

这应该是something/libspotify/lib,,并有可能在那里你建libspot.so的目录。您可能还需要指定:

-I/path/to/spotify/includes 
+0

的gcc -o libspot.so -L〜/下载/ libspotify - 51年1月12日,Linux的的i686-release/lib目录/ -L在/ usr /本地/ lib目录/ -I〜/下载/ libspotify - 51年1月12日,Linux的i686的释放/包括/ libspotify/-shared jukebox.c appkey.c – user1386101

+0

我试着用上面的命令,但它仍然没有工作。 – user1386101

+0

你需要在'-Wl,-rpath,$ HOME /下载/ libspotify-12.151-Linux的i686的发布版/ lib'以及传递的,所以'libspot.so'知道如何寻找那里的图书馆。由于评估规则非常有限,我倾向于不在路径名中使用'〜' – Petesh