我正在尝试使用 libusb.so 如何在我的 android 项目中使用 libusb 库。
我已经使用 libusb 源为我的 android 项目编译了 libusb 库。现在我想在我的代码中使用新生成的库 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........");
}
安卓.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 个退出状态 make:[obj/local/armeabi/libTest.so] 错误1
它表明我的代码中没有定义函数。那么我将如何使所有功能正常工作....
最后如果我这样做
替换: if( libusb_init(NULL) ) 为: if(1)
所有文件均已生成,但显示此错误:
目标Loadlibrary.exe' failed makefile /Loadlibrary/Debug line 31 C/C++ Problem
undefined reference to
_WinMain@16' 的配方加载库第 39 行,外部位置:\usr\src\debug\cygwin-1.7.17-1\winsup\cygwin\lib\libcmain.c C/C++ 问题制作:* [Loadlibrary6.exe]错误 1 加载库 C/C++ 问题