簡體   English   中英

QT 5.7和Bluez 5.47 ConnectDevice的SegemtationError

[英]SegemtationError with QT 5.7 and Bluez 5.47 ConnectDevice

我正在嘗試讓以下git運行https://github.com/com2m/anki-overdrive-goes-iot/blob/master/Documentation.md#bluez5.42

在構建它時,我遇到了一個錯誤,這似乎是gcc 7中的錯誤。我在Qmake之后運行make進行編譯時,遵循了Compile錯誤

之后我在運行build/ankioverdrive時遇到了build/ankioverdrive

運行gdb在BT Full中為我提供以下信息

#0  0x00007ffff7931ccb in QLowEnergyController::connectToDevice() () from /usr/lib/x86_64-linux-gnu/libQt5Bluetooth.so.5
No symbol table info available.
#1  0x00005555555718cc in AnkiCar::reconnect (this=0x5555557a82d0) at src/ankicar.cpp:444
No locals.
#2  0x00005555555654b3 in DriveMode::requestBatteryUpdate (this=0x5555557a6400) at src/drivemode.cpp:102
        racecar = 0x5555557a82d0
        _container_ = {c = {<QListSpecialMethods<Racecar*>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = {<std::__atomic_base<int>> = {static _S_alignment = 4, 
                          _M_i = -1}, <No data fields>}}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x5555557a85a0}, d = 0x5555557a85a0}}, i = {i = 0x5555557a85b8}, e = {i = 0x5555557a85d0}, 
          control = 1}
#3  0x00005555555768df in DriveMode::qt_static_metacall (_o=0x5555557a6400, _c=QMetaObject::InvokeMetaMethod, _id=8, _a=0x7fffffffdf20) at moc_drivemode.cpp:156
        _t = 0x5555557a6400
#4  0x00007ffff745f5b5 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#5  0x00007ffff746c027 in QTimer::timeout(QTimer::QPrivateSignal) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#6  0x00007ffff746c388 in QTimer::timerEvent(QTimerEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#7  0x00007ffff74600db in QObject::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#8  0x00007ffff7430991 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#9  0x00007ffff7488d8e in QTimerInfoList::activateTimers() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#10 0x00007ffff7489551 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#11 0x00007ffff5002287 in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#12 0x00007ffff50024c0 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#13 0x00007ffff500254c in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#14 0x00007ffff74898ef in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#15 0x00007ffff742e9ea in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#16 0x00007ffff7437a84 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#17 0x000055555555b42e in main (argc=1, argv=0x7fffffffe468) at src/main.cpp:29
        a = <incomplete type>

我認為這是bluez的問題。 我正在運行bluez 5.47,同時確保通過運行來確保配置允許實驗模式

./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-experimental --enable-maintainer-mode

並更改了/lib/systemd/system/bluetooth.service

我通過致電確保藍牙正在運行

sudo hciconfig hci0 up

與我的blootooth設備一起蜂hci0

但仍然沒有任何成功

我目前正在Kubuntu 18.04上嘗試所有這些發行版。

我不知道如何解決此問題。

我更改了ankicar.cpp以在嘗試重新連接之前檢查藍牙控制器當前是否未連接:

void AnkiCar::reconnect() {
    if (lowEnergyController != 0) {
        if (lowEnergyController->state() == QLowEnergyController::UnconnectedState)
            lowEnergyController->connectToDevice();
    }
}

進行此更改后,汽車將建立連接,並且連接似乎穩定(即使沒有如上所述的--experimental開關)。

[E6:45:5A:32:6E:4A]>> CONNECTED.
[E6:45:5A:32:6E:4A]>> SERVICE DISCOVERY FINISHED.
[E6:45:5A:32:6E:4A]>> FOUND ANKI SERVICE.
[E6:45:5A:32:6E:4A]>> SERVICE CHARACTERISTICS DISCOVERED.
[E6:45:5A:32:6E:4A]>> SDK ON.
[E6:45:5A:32:6E:4A]>> DESCRIPTOR SUCCESSFULLY WRITTEN.
[E6:45:5A:32:6E:4A]>> NOT CHARGING, NOT ON TRACK.
[E6:45:5A:32:6E:4A]>> ATTEMPT TO ACCESS GAMEPAD FAILED.
[E6:45:5A:32:6E:4A]>> USING GAMEPAD #1.
[E6:45:5A:32:6E:4A]>> READY.
[E6:45:5A:32:6E:4A]>> NOT CHARGING, ON TRACK.

您需要在軌道上移動汽車一點點,以使其識別為ON TRACK 我安裝了以下軟件包才能構建項目:

pi@raspberrypi:~ $ sudo apt-get install bluetooth bluez blueman
pi@raspberrypi:~ $ sudo apt-get install bluez bluez-firmware       
pi@raspberrypi:~ $ sudo apt-get install pi-bluetooth
pi@raspberrypi:~ $ sudo apt-get install qt5-qmake
pi@raspberrypi:~ $ sudo apt-get install qt5-default
pi@raspberrypi:~ $ sudo apt-get install qtconnectivity5-dev

我還需要將QMAKE_CFLAGS_ISYSTEM = -I添加到項目文件ankioverdrive.pro (請參閱/ usr / include / c ++ / 7 / cstdlib:75:15:致命錯誤:stdlib.h:沒有這樣的文件或目錄#include_next <stdlib。 h>

QT文檔在http://doc.qt.io/qt-5.6/qlowenergycontroller.html#connectToDevice中

void QLowEnergyController::connectToDevice()
// Connects to the remote Bluetooth Low Energy device.

如果控制器的state()不等於UnconnectedState,則此函數不執行任何操作。 成功建立連接后,將發出connected()信號。 在Linux / BlueZ系統上,無法使用此類的兩個實例連接到同一遠程設備。 對該函數的第二次調用可能會因錯誤而失敗。 在將來的發行版中可能會刪除此限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM