我已經用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文件。這將是巨大的,如果你能給我如何解決這個問題
的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
我試着用上面的命令,但它仍然沒有工作。 – user1386101
你需要在'-Wl,-rpath,$ HOME /下載/ libspotify-12.151-Linux的i686的發佈版/ lib'以及傳遞的,所以'libspot.so'知道如何尋找那裏的圖書館。由於評估規則非常有限,我傾向於不在路徑名中使用'〜' – Petesh