我正在尝试编译/运行在运行Ubuntu的BeagleBone Black上使用BlueCove库的程序。但是我在运行时遇到了这个错误:
Native Library bluecove_arm not available
javax.bluetooth.BluetoothStateException: BlueCove library bluecove not available
at com.intel.bluetooth.BlueCoveImpl.loadNativeLibraries(BlueCoveImpl.java:381)
at com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:429)
at com.intel.bluetooth.BlueCoveImpl.access$500(BlueCoveImpl.java:65)
at com.intel.bluetooth.BlueCoveImpl$1.run(BlueCoveImpl.java:1020)
at java.security.AccessController.doPrivileged(Native Method)
at com.intel.bluetooth.BlueCoveImpl.detectStackPrivileged(BlueCoveImpl.java:1018)
at com.intel.bluetooth.BlueCoveImpl.getBluetoothStack(BlueCoveImpl.java:1011)
at javax.bluetooth.LocalDevice.getLocalDeviceInstance(LocalDevice.java:75)
at javax.bluetooth.LocalDevice.getLocalDevice(LocalDevice.java:95)
at edit.rit.ce.whud.DataServer.bluetoothHandler(DataServer.java:16)
at edit.rit.ce.whud.GUI.main(GUI.java:153)
我知道这不是代码的问题,因为我可以在运行Mint的x64位Linux计算机上运行带有BlueCove库的代码(基于Ubuntu)。我在网上搜索了几个解决方案,找不到解决我问题的解决方案。 我已经使用这种方法重新编译了用于ARM的bluecove-gpl-2.1.0库
http://www.raspberrypi.org/forums/viewtopic.php?f=81&t=58758
并尝试通过终端和NetBeans IDE编译/运行代码。
我需要做一些其他步骤来完成这项工作吗?为什么即使在我为ARM重新编译它之后仍然无法使用Bluecove库?
答案 0 :(得分:4)
这是为了解决这个问题的任何人的未来参考:
在raspberry pi论坛上查看the answer提供的MyRevel。它就像一个魅力! :)
为了传播易于理解的工作解决方案,并且因为这个问题是google中出现的第一个结果,我将重新发布上述答案中的步骤(我做了一些细微的修改,但效果不大是一样的):
从http://code.google.com/p/bluecove/downloads/list或http://sourceforge.net/projects/bluecove/files/BlueCove/2.1.0/下载bluecove-2.1.0.jar
和bluecove-gpl-2.1.0-sources.tar.gz
。
在RPi上,使用终端或SSH:
创建一个进行编译并提取源文件的地方:
`mkdir -p ~/temp/bluecove/target/`
`cd ~/temp`
`tar xf bluecove-gpl-2.1.0-sources.tar.gz`
`mv ~/Downloads/bluecove-2.1.0.jar ~/temp/bluecove/target/bluecove-2.1.0.jar`
现在文件夹temp包含两个文件夹:bluecove-gpl-2.1.0和bluecove。
修改build.xml:
nano ~/temp/bluecove-gpl-2.1.0/build.xml
Delete text '-SNAPSHOT' on line 12 of build.xml:
from: <property name="product_version" value="2.1.0-SNAPSHOT"/>
to: <property name="product_version" value="2.1.0"/>
Save file: `Ctrl+X` then `Y` and `Enter`.
安装编译所需的蓝牙包和包:
sudo apt-get update && apt-get upgrade && apt-get autoremove
sudo apt-get install bluetooth bluez-utils blueman
sudo apt-get install libbluetooth-dev # BlueZ development package needed for compilation later
sudo apt-get install ant
连接蓝牙适配器并测试蓝牙是否正常:
/etc/init.d/bluetooth status # check to see whether the bluetooth is live
hcitool scan # show any devices in range of the dongle
sudo service bluetooth start # start the bluetooth service if required
开始编译:
cd ~/temp/bluecove-gpl-2.1.0
ant all
成功编译后,您可以在以下位置找到所需的gpl jar:
~/temp/bluecove-gpl-2.1.0/target/bluecove-gpl-2.1.0.jar
<强>最后... 强>
将生成的文件bluecove-gpl-2.1.0.jar
与下载的文件bluecove-2.1.0.jar
一起移动到java开发程序的java构建路径库目录中。
使用bluecove库运行java程序可以这样完成:
java -cp /path/to/MyJavaProgram.jar:/path/to/bluecove_libs/ myjavaprogram.MyJavaProgram
-cp
开关允许我们指定要包含的文件和目录列表。每个目录和文件都用冒号(:)分隔。
在这种情况下,我们希望包含MyJavaProgram.jar
以及bluecove_libs
目录中的所有文件。
最后一个参数告诉java应该从哪个包和类main()执行。
请注意/path/to/bluecove_libs/
将包含以下文件:
bluecove-gpl-2.1.0.jar
- &gt;我们上面编译的文件bluecove-2.1.0.jar
- &gt;我们从网上下载的文件答案 1 :(得分:0)
关于“我需要做一些其他步骤才能使这项工作成功吗?为什么即使在我为ARM重新编译它之后它仍然无法使用Bluecove库?”
当我尝试在Ubuntu下编译时,我发现了同样的问题。原因是在gcc编译器中。它具有不同版本的不同默认参数。
我必须在bluecove-gpl-2.1.1-SNAPSHOT.jar的build.xml中进行以下更改
1) &lt; property name =»bluecove.native.linker.options»value =» - nodefaultlibs«/&gt;
=&GT;
&lt; property name =»bluecove.native.linker.options»value =»»/&gt;
2) &lt; arg value =» - Wl,-soname,libbluecove $ {library_sufix} - $ {product_version}»/&gt;
=&GT;
&lt; arg value =» - Wl,-no-as-needed,-soname,libbluecove $ {library_sufix} - $ {product_version}»/&gt;
3) &lt; arg value =» - L $ {libs-universal}»/&gt;
&lt; arg value =» - lbluetooth»/&gt;
&lt; arg line =»$ {bluecove.native.linker.options}»/&gt;
&lt; arg value =» - Wl,-soname,libbluecove $ {library_sufix} - $ {product_version}»/&gt;
=&GT;
&lt; arg value =» - L $ {libs-universal}»/&gt;
&lt; arg line =»$ {bluecove.native.linker.options}»/&gt;
&lt; arg value =» - Wl,-no-as-needed,-soname,libbluecove $ {library_sufix} - $ {PRODUCT_VERSION}»/&GT;
&lt; arg value =» - lbluetooth»/&gt;
http://privateblog.info/raspberry-pi-kak-rabotat-s-bluetooth-na-java/