6

我正在尝试在运行 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(基于 Ubuntu)的 x64 位 Linux 计算机上使用 BlueCove 库运行代码。我在网上搜索了几种解决方案,但找不到能解决我问题的一种。我已经使用这种方法为 ARM 重新编译了 bluecove-gpl-2.1.0 库

http://www.raspberrypi.org/forums/viewtopic.php?f=81&t=58758

并尝试通过终端和 NetBeans IDE 编译/运行代码。

我还需要做一些其他的步骤来完成这项工作吗?为什么即使我为 ARM 重新编译了 Bluecove 库,它仍然说它不可用?

4

2 回答 2

4

这是供任何遇到此问题的人将来参考:

在树莓派论坛上查看MyRevel提供的答案。它就像一个魅力!:)

为了传播一个易于遵循的工作解决方案,并且因为这个问题是谷歌中出现的第一个结果,我正在重新发布上述答案中的步骤(我做了一些轻微的修改,但效果是一样的):

下载bluecove-2.1.0.jarbluecove-gpl-2.1.0-sources.tar.gzhttp://code.google.com/p/bluecove/downloads/listhttp://sourceforge.net/projects/bluecove/files/BlueCove/2.1.0/下载。

在 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-> 我们上面编译的文件
  • bluecove-2.1.0.jar-> 我们从网上下载的文件
于 2014-10-30T06:38:37.560 回答
0

关于“我还需要做一些其他的步骤来完成这项工作吗?为什么即使在我为 ARM 重新编译了 Bluecove 库之后,它仍然说它不可用?”

当我尝试在 Ubuntu 下编译时,我发现了同样的问题。原因在于 gcc 编译器。对于不同的版本,它有不同的默认参数。

我必须在 build.xml 中为 bluecove-gpl-2.1.1-SNAPSHOT.jar 进行以下更改

1) <属性名称=»bluecove.native.linker.options»值=»-nodefaultlibs«/>

=>

<属性名称=»bluecove.native.linker.options»值=»»/>

2) <arg value=»-Wl,-soname,libbluecove${library_sufix}-${product_version}»/>

=>

<arg value=»-Wl,—no-as-needed,-soname,libbluecove${library_sufix}-${product_version}»/>

3) <arg value=»-L${libs-universal}»/>

<arg value=»-lbluetooth»/>

<arg line=»${bluecove.native.linker.options}»/>

<arg value=»-Wl,-soname,libbluecove${library_sufix}-${product_version}»/>

=>

<arg value=»-L${libs-universal}»/>

<arg line=»${bluecove.native.linker.options}»/>

<arg value=»-Wl,—no-as-needed,-soname,libbluecove${library_sufix}-${product_version}»/>

<arg value=»-lbluetooth»/>

http://privateblog.by/raspberry-pi-kak-rabotat-s-bluetooth-na-java/

于 2017-01-06T03:59:23.563 回答