2014-01-14 2 views
0

Java에서 호출하려는 C 코드를 작성했습니다. 내가 한 일은 libspotify에서 또 다른 c 함수를 호출하는 내 C 코드에 함수가 있고 JNA를 사용하여 Java Wrapper를 작성하여 C 함수를 호출하려고하는 것입니다.JNA를 사용하여 Java에서 C에서 함수를 호출하려고 시도했습니다.

실제로 작동중인 c에서 spotify에 대한 간단한 로그인 기능을 작성했습니다. 여기에있어서

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

에게 I 사용 I 대신 libspotify 예에서 제공되는 화장 파일을 사용한다이어서 다음 단계를 갖는다 C 파일에 대한 링크가 다음 컴파일하고을 생성하고 cmd. 그래서 다음

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을 실행할 수있는 명령처럼 내 자바 파일이 보이는 것을 이것은

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

파일 libspotify에서 sp_session_create 기능을합니다 (이, 내가 잘못 여기에 무슨 일이 일어나고 있는지 확실하지 않다

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

하지만, 여기에 내가 생각하고 무엇을 :

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

다음 VA 파일은 내가 얻을 예외 C 코드에서 부르는 C API). 그래서 .so 파일을 생성하려고 할 때 libspotify 라이브러리를 어떻게 든 연결해야한다고 생각합니다. 이 문제를 해결하는 방법에 대한 제안을하면 도움이 될 것입니다.

답변

-1

후 2 일 내가 일을 그것을 가지고 어떻게, 내가하는 .so 파일을 생성하는 데 사용되는 명령은 다음과 같습니다.

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

나머지 단계는 위와 같습니다.

당신의 도움이 :)

2

spotify 라이브러리에 링크해야합니다.

이것은 libspot.so를 컴파일 할 때 수행해야합니다. 이 something/libspotify/lib, 될 가능성이 libspot.so를 구축 디렉토리입니다해야

-L/path/to/spotify/library 

:이 작업은 수행 할 수 있습니다. 또한 지정해야 할 수도 있습니다 :이 연구의

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

의 gcc -o libspot.so -L ~/다운로드/libspotify - 12.1.51 - 리눅스는 i686 출시/lib 디렉토리/-L/usr/지방 당신에게 에릭 로버트슨과 Petesh 감사/lib/-I ~/Downloads/libspotify-12.1.51-Linux-i686-release/include/libspotify/-shared jukebox.c appkey.c – user1386101

+0

위의 명령을 사용해 보았지만 여전히 작동하지 않습니다. – user1386101

+0

'-Wl, -rpath, $ HOME/Downloads/libspotify-12.151-Linux-i686-releases/lib'도 전달해야하므로'libspot.so'는 라이브러리를 찾을 것입니다. 나는 평가 룰이 매우 제한되어 있기 때문에 경로 이름에'~'를 쓰지 않는 경향이있다. – Petesh