首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在我的dart程序中没有检测到libserial。

在我的dart程序中没有检测到libserial。
EN

Stack Overflow用户
提问于 2022-08-17 11:41:49
回答 2查看 67关注 0票数 0

我制作了一个极简式的飞镖软件,它可以连接一个串行端口:

代码语言:javascript
运行
复制
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');
  });
}

但一旦我跑了:

代码语言:javascript
运行
复制
dart run

我得到以下错误:

代码语言:javascript
运行
复制
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机器上运行它。

EN

回答 2

Stack Overflow用户

发布于 2022-08-17 11:41:49

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

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

代码语言:javascript
运行
复制
ldconfig -p | grep libserial

在没有输出的情况下,您可以像看到这里那样安装它。对于基于linux和debian的发行版,运行:

代码语言:javascript
运行
复制
sudo apt-get install libserial0

然后重新运行命令:

代码语言:javascript
运行
复制
ldconfig -p | grep libserial

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

代码语言:javascript
运行
复制
    libserialport.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libserialport.so.0

有时,在此之后,以图书馆的名义,一个数字可能会被附加。在这种情况下,我们可以像这样将libary符号链接到/usr/lib路径:

代码语言:javascript
运行
复制
sudo ln -s /usr/lib/x86_64-linux-gnu/libserialport.so.0 /usr/lib/libserialport.so

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

票数 0
EN

Stack Overflow用户

发布于 2022-08-19 17:06:00

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

安装libserialport dev包

用于基于Debian的系统使用

sudo apt安装libserialport dev

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73387868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档