2013-03-05 41 views
1

我想使用libusb.so如何在我的android項目中使用libusb庫。如何在庫成功加載後在C或JAVA編碼中使用libusb.so庫函數?

我編譯libusb庫爲我的android項目使用libusb source.Now我想在我的代碼中使用新生成的libusb.so函數。 我用下面的代碼..只是檢查功能是否加載.. 我應該怎麼做,以使用libusb庫在我的應用程序中列出設備信息。

代碼JNI目錄..

libTest.c

#include <string.h> 
#include <jni.h> 
#include <stdio.h> 
#include <sys/types.h> 
JNIEXPORT jstring JNICALL Java_com_example_loadlibrary_MainActivity_libTask(JNIEnv* env, jobject obj) 
{ 
if(libusb_init(NULL)) 
    return (*env)->NewStringUTF(env, "Library Loaded Successfuly!"); 
else 
    return (*env)->NewStringUTF(env, "Can not load library........"); 
} 

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libusb-1.0 

LOCAL_SRC_FILES := libusb-1.0.so 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libTest 
LOCAL_SRC_FILES := libTest.c 

include $(BUILD_SHARED_LIBRARY) 

libusb-1.0.so

和src包含此Java文件:

MainActivity.java

package com.example.loadlibrary; 

import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView tv = new TextView(this); 
    tv.setText(libTask()); 
    setContentView(tv); 


} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
private native String libTask(); 
static{ 
    System.loadLibrary("usb-1.0"); 
    System.loadLibrary("libTest"); 
} 

} 

,但它顯示了NDK編譯錯誤:

**錯誤:未定義的引用 'libusb_init' collect2:LD返回1個退出狀態 化妝: [OBJ /local/armeabi/libTest.so]錯誤1*

它顯示函數未在我的代碼中定義。 所以,我怎麼就能得到所有的功能得到工作....

和atlast如果我做

更換: 如果(libusb_init(NULL)) 有: 如果(1)

所有文件生成,但顯示這樣的錯誤:

配方目標Loadlibrary.exe' failed makefile /Loadlibrary/Debug line 31 C/C++ Problem undefined reference to _WinMain @ 16' 的LoadLibrary線39,外部位置:\ USR \ SRC \調試\ cygwin的-1.7.17-1 \ winsup \ cygwin的\ lib \ libcmain.c C/C++問題 make: * [Loadlibrary6.exe]錯誤1的LoadLibrary C/C++問題

回答

1

第一負載存儲庫,然後使用函數它

 static{ 
     System.loadLibrary("usb-1.0"); 
     System.loadLibrary("libTest"); 
     } 
     public final static native String libTask(String st); //libTask is returning a string also... 

.so文件是 「JNI」 文件夾,以便第一檢查內部的後構建它們是在「libs/armeabi」文件夾中創建的嗎?

+0

不能正常工作存在相同的問題... – Pankaj 2013-03-05 12:16:24

1

我用NDK和libusb支持構建的內容如下:添加到你的Android.mk

 LOCAL_LDLIBS :=-L/path/to/your/compiled/libusb.so -lusb
試試看。希望這可以幫助。

相關問題