【问题标题】:libserial is not detected in my dart programm在我的飞镖程序中未检测到 libserial
【发布时间】:2022-08-20 01:06:00
【问题描述】:

我制作了一个连接串口的简约飞镖软件:

import \'package:libserialport/libserialport.dart\';
import \'dart:typed_data\';

void main(List<String> arguments) {
  final port = SerialPort(\"/dev/pts/4\");
  if (!port.openReadWrite()) {
    print(SerialPort.lastError);
  }

  port.write(Uint8List.fromList(\"Lorem Ipsum\".codeUnits));

  final reader = SerialPortReader(port);
  reader.stream.listen((data) {
    print(\'received: $data\');
  });
}

但是一旦我运行:

dart run

我收到以下错误:

Unhandled exception:
Invalid argument(s): Failed to load dynamic library \'libserialport.so\': libserialport.so: cannot open shared object file: No such file or directory
#0      _open (dart:ffi-patch/ffi_dynamic_library_patch.dart:12:43)
#1      new DynamicLibrary.open (dart:ffi-patch/ffi_dynamic_library_patch.dart:23:12)
#2      dylib
package:libserialport/src/dylib.dart:32
#3      _SerialPortImpl._init.<anonymous closure>
package:libserialport/src/port.dart:221
#4      Util.call
package:libserialport/src/util.dart:37
#5      _SerialPortImpl._init
package:libserialport/src/port.dart:221
#6      new _SerialPortImpl
package:libserialport/src/port.dart:211
#7      new SerialPort
package:libserialport/src/port.dart:72
#8      main
bin/serial.dart:5
#9      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)
#10     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

Exited (255)

我在linux机器上运行它。

    标签: dart libserial


    【解决方案1】:

    您在错误消息中看到的问题是,希望在某个地方找到 libserial.so 库。

    首先,我们需要找到该库并查看它是否已安装:

    ldconfig -p | grep libserial
    

    如您所见here,您可以在没有输出时安装它。对于基于 linux mint 和 debian 的发行版运行:

    sudo apt-get install libserial0
    

    然后重新运行命令:

    ldconfig -p | grep libserial
    

    如果安装后的命令有输出,则必须检查路径是否为/lib/libserialport.so。就我而言,它不是:

        libserialport.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libserialport.so.0
    

    有时在图书馆的名称之后可能会附加一个数字。在这种情况下,我们可以将库符号链接到 /usr/lib 路径,如下所示:

    sudo ln -s /usr/lib/x86_64-linux-gnu/libserialport.so.0 /usr/lib/libserialport.so
    

    此外,另一种情况是如果库不在/usr/lib/libserial.so 中,而是在/usr/lib 路径内的子文件夹中。

    【讨论】:

      【解决方案2】:

      问题是动态库无法从系统加载。解决方案是

      安装 libserialport-dev 包

      用于基于 Debian 的系统使用

      sudo apt install libserialport-dev

      注意:dart 包 libserialport 使用 FFI 访问本机接口,使用 libserialport 一个用 C 编写的最小的跨平台共享库。该包实际上包含 c 代码,并且应该在我们构建或运行时将其编译为 libserial.so应用程序。由于某种原因,当我们直接使用这个包时不会发生这种情况。

      如果您使用颤振框架使用 flutter_libserialport 包,这将负责创建 .so 文件而不会出现任何问题

      【讨论】:

        猜你喜欢
        • 2013-05-19
        • 2016-08-25
        • 2019-03-11
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        相关资源
        最近更新 更多